我有一个运行良好的加密方法,并传递给我一个加密的字符串。
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 ......有点难过在哪里使用它。
答案 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