【问题标题】:Triple DES encryption string generates "\n"三重 DES 加密字符串生成“\n”
【发布时间】:2019-12-18 08:21:11
【问题描述】:

加密字符串时,会在字符串末尾生成'\n'

这就是我进行加密的方式

public static String encrypt(String plainText) throws Exception {
        byte[] tdesKeyData = Consts.getSecretKey().getBytes();
        byte[] myIV = Consts.getInitializationVector().getBytes();
        SecretKeySpec myKey = new SecretKeySpec(tdesKeyData, "DES");
        IvParameterSpec ivspec = new IvParameterSpec(myIV);
        Cipher cipher = Cipher.getInstance("DESede/CBC/PKCS7Padding");
        cipher.init(Cipher.ENCRYPT_MODE, myKey, ivspec);

        byte[] plainTextBytes = plainText.getBytes("UTF-8");
        byte[] buf = cipher.doFinal(plainTextBytes);
        byte[] base64Bytes = Base64.encode(buf, Base64.DEFAULT);
        String base64EncryptedString = new String(base64Bytes);
        return base64EncryptedString;
    }

请有人指导我,我在这里做错了什么?提前致谢。

【问题讨论】:

  • 一旦你解决了你的错误,只有一个建议:不要使用 DES,它现在已经过时了。使用 AES 之类的东西。
  • 如果Base64.DEFAULT 被选为Base64#encode 中的第二个参数,则结果包含换行符。使用Base64.NO_WRAP,结果没有换行符。
  • 是的 刚刚在文档中看到developer.android.com/reference/android/util/Base64.html 并修复了@Topaco 是的,没错。

标签: java android encryption des


【解决方案1】:

Base64.NO_WRAP

编码器标志位省略所有行终止符(即输出将在一条长行上)。

【讨论】:

    【解决方案2】:
      public byte[] encrypt(String message) throws Exception {
            final MessageDigest md = MessageDigest.getInstance("md5");
            final byte[] digestOfPassword = md.digest("HG58YZ3CR9"
                    .getBytes("utf-8"));
            final byte[] keyBytes = Arrays.copyOf(digestOfPassword, 24);
            for (int j = 0, k = 16; j < 8;) {
                keyBytes[k++] = keyBytes[j++];
            }
    
            final SecretKey key = new SecretKeySpec(keyBytes, "DESede");
            final IvParameterSpec iv = new IvParameterSpec(new byte[8]);
            final Cipher cipher = Cipher.getInstance("DESede/CBC/PKCS5Padding");
            cipher.init(Cipher.ENCRYPT_MODE, key, iv);
    
            final byte[] plainTextBytes = message.getBytes("utf-8");
            final byte[] cipherText = cipher.doFinal(plainTextBytes);
            // final String encodedCipherText = new sun.misc.BASE64Encoder()
            // .encode(cipherText);
    
            return cipherText;
        }
    
        public String decrypt(byte[] message) throws Exception {
            final MessageDigest md = MessageDigest.getInstance("md5");
            final byte[] digestOfPassword = md.digest("HG58YZ3CR9"
                    .getBytes("utf-8"));
            final byte[] keyBytes = Arrays.copyOf(digestOfPassword, 24);
            for (int j = 0, k = 16; j < 8;) {
                keyBytes[k++] = keyBytes[j++];
            }
    
            final SecretKey key = new SecretKeySpec(keyBytes, "DESede");
            final IvParameterSpec iv = new IvParameterSpec(new byte[8]);
            final Cipher decipher = Cipher.getInstance("DESede/CBC/PKCS5Padding");
            decipher.init(Cipher.DECRYPT_MODE, key, iv);
    
            // final byte[] encData = new
            // sun.misc.BASE64Decoder().decodeBuffer(message);
            final byte[] plainText = decipher.doFinal(message);
    
            return new String(plainText, "UTF-8");
        }
    

    试试这个代码来加密和解密。

    【讨论】:

      猜你喜欢
      • 2011-10-22
      • 2012-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-31
      • 1970-01-01
      • 2012-05-06
      • 1970-01-01
      相关资源
      最近更新 更多