JAVA使用不同的密钥两次加密String并将其解密

RVP

我将使用2个不同的密钥使用AES算法对字符串进行两次加密。在那之后,我想使用相同的2个密钥解密加密的字符串。我使用了此功能,它只能用于一种加密和解密,而不能用于第二种加密/解密:

 public String encryptDecryptAes(String key , String input , int mode) throws NoSuchPaddingException, NoSuchAlgorithmException, NoSuchProviderException, InvalidKeyException, ShortBufferException, BadPaddingException, IllegalBlockSizeException {
        java.security.Security.addProvider(new BouncyCastleProvider());
        String result = null;
        byte[] inputBytes = input.getBytes();
        byte[] keyBytes = key.getBytes() ;

        SecretKeySpec secretKey = new SecretKeySpec(keyBytes , "AES") ;

        Cipher cipher = Cipher.getInstance("AES/ECB/PKCS7Padding", "BC");

        if(mode==0) {

            //Encrypt
            cipher.init(Cipher.ENCRYPT_MODE, secretKey);

             cipherText = new byte[cipher.getOutputSize(inputBytes.length)];
             ctLength = cipher.update(inputBytes, 0, inputBytes.length, cipherText, 0);
            ctLength += cipher.doFinal(cipherText, ctLength);
            result = new  String(cipherText);


        }

        if(mode==1) {

            //DECRYPT
            cipher.init(Cipher.DECRYPT_MODE, secretKey);
            byte[] output = new byte[cipher.getOutputSize(ctLength)];
            int ptLength = cipher.update(cipherText, 0, ctLength, output, 0);
            ptLength += cipher.doFinal(output, ptLength);
           result = new String(output);
        }

        return result ;
    }

ReadyPlayer2

加密的次数应该是无限的,因为您只是从纯文本开始,然后以新的密文结束。解密时,您需要确保以相反的顺序使用密钥。该过程将类似于以下内容:

以称为plainText的文本开头。

加密:

  • 用密钥1加密plainText,存储在singleEncryption中
  • 带密钥2的Encypt singleEncryption,存储在doubleEncryption中

解密:

  • 用密钥2解密doubleEncryption,存储在singleEncryption中
  • 用密钥1解密singleEncryption,存储在plainText中

在此示例中,使用变量是为了简化说明,实际上并不需要多个文本副本。

编辑:如果您认为用于加密的密钥是一个堆栈,那么后进先出。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用不同的片段调用 add() 两次

使用不同的参数两次读取文件

使用不同的参数调用函数两次

使用不同的参数运行两次 tumblr API 调用以返回不同的数据

奇怪的DES行为-使用不同的密钥成功解密

使用testify使用不同的输入和输出两次模拟接口方法

两次安装Debian Wheezy时使用不同的控制台字体大小

如何使用不同的属性两次执行Maven插件

在python中使用不同的名称两次导入模块

如何使用不同的记录值两次查询表中的列?

为什么JUnit使用不同的结果运行两次测试

使用不同的 publicPath 在 webpack 中两次注入相同的资产

使用不同的行为两次向TabControl注册同一视图

SQL:使用不同的子句获取列表两次,其中

使用ggsave(ggplot2)将ggplot用不同的文件格式保存两次

如何使用不同的 lambda 表达式两次模拟方法?

测试一个方法是否使用不同的参数被调用两次

用不同的道具两次分派动作

加密在C#和解密在Java中使用相同的密钥

如何在Java中使用RSA密钥加密解密

加密和解密在两个不同的Java程序

在Java中使用不必要的值执行了两次查询(错误)

是否想在同一视图上使用不同类型两次使用同一模型?

设置两次着色器属性(Propertyblock)(使用Lerp淡出颜色并将其重置为原始颜色)

密钥生成Java,加密php,解密Java

调用一个函数,该函数需要两次使用不同的闭包的闭包

如果使用不同的参数连续两次调用递归函数,则会出现错误的结果

如何使用Forge加密和解密pdf blob并将其存储在localStorage中?

在JAVA中加密的AES密钥迅速解密