Java PBEwithMD5andDES解密问题

时间:2014-08-07 11:11:46

标签: java encryption cryptography base64

我有一个运行良好的加密方法,并传递给我一个加密的字符串。

    KeySpec keySpec = new PBEKeySpec(encryptionPassword.toCharArray(), salt, iterations);

    SecretKey key = SecretKeyFactory.getInstance("PBEWithMD5AndDES").generateSecret(keySpec);
    AlgorithmParameterSpec paramSpec = new PBEParameterSpec(salt, iterations);


//encryption
    Cipher encoder = Cipher.getInstance(key.getAlgorithm());
    encoder.init(Cipher.ENCRYPT_MODE, key, paramSpec);

    String str_to_encrypt = "Hello";
    byte[] enc = encoder.doFinal(str_to_encrypt.getBytes("UTF8"));

    System.out.println("encrypted = " + DatatypeConverter.printBase64Binary(enc));


output: encrypted = vjXsSX0cBNc=

但是我也希望解密这个字符串我已经收到了,但是我遇到了麻烦,尤其是getBytes和printBase64Binary的反向。

这是我第一次尝试解密,所以我使用了大量的Google搜索,我发现'parseBase64Binary'可以从字符串中获取字节,使用'new String(dec,“US-ASCII”)然后转把字节变成字符串......某处某事变得歪斜。

//decryption
   Cipher encoder = Cipher.getInstance(key.getAlgorithm());
   encoder.init(Cipher.DECRYPT_MODE, key, paramSpec);

   String str_to_decrypt = "vjXsSX0cBNc=";
   byte[] dec = DatatypeConverter.parseBase64Binary(str_to_decrypt);

   System.out.println("decrypted = " + new String(dec, "UTF8"));


output: decrypted = ?5?I}?

我能想到的唯一一件事就是我没有真正解密字符串,因为我没有在任何地方使用过encoder.doFinal ......有点难过在哪里使用它。

1 个答案:

答案 0 :(得分:1)

编辑:回答完整性问题,全部排序!

玩了一下,我说我没有正确解密字符串,因为我没有使用编码器。最终...试验和错误导致我这样:

 String str_to_decrypt = "vjXsSX0cBNc=";

 byte[] dec = encoder.doFinal(DatatypeConverter.parseBase64Binary(str_to_decrypt));

 System.out.println("decrypted = " + new String(dec, "UTF8"));


output: decrypted = Hello