Pha*_*ala 5 java encryption des
我有以下方法:
public String decrypt(String strToBeDecrypted) {
try {
strToBeDecrypted = URLDecoder.decode(strToBeDecrypted, "UTF-8");
DESKeySpec desKeySpec = new DESKeySpec(key);
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
SecretKey skey = keyFactory.generateSecret(desKeySpec);
IvParameterSpec ivSpec = new IvParameterSpec(iv);
cipher.init(Cipher.DECRYPT_MODE, skey, ivSpec);
byte[] keyByteArray = new BASE64Decoder().decodeBuffer(strToBeDecrypted);
byte[] original = cipher.doFinal(keyByteArray);
return new String(original, "UTF-8");
} catch (Exception e) {
logger.error(ExceptionUtil.getDetailedMessage(e));
}
return "";
}
Run Code Online (Sandbox Code Playgroud)
这是扔
"name=javax.crypto.IllegalBlockSizeException;message=Input length must be multiple of 8 when decrypting with padded cipher;"
Run Code Online (Sandbox Code Playgroud)
在下面一行:
byte[] original = cipher.doFinal(keyByteArray);
Run Code Online (Sandbox Code Playgroud)
有人可以告诉我这里有什么问题吗?
它所指的输入长度是密文 (strToBeDecrypted) 的长度,它预计是块大小的倍数。这意味着默认情况下库期望您的输入被填充。
这意味着您要么需要在解密时将填充设置为“无”(因为这是加密时使用的“填充”),要么以某种方式损坏了密文。
尝试将“DES”更改为“DES/ECB/NoPadding”。我不知道您的实现的默认密码模式是什么,但通常是“ECB”或“CBC”。如果这两者都不起作用,那么您就会在某个地方破坏您的密文。
| 归档时间: |
|
| 查看次数: |
38553 次 |
| 最近记录: |