我尝试在Java中建立加密和解密机制。我找到了一些解密代码,但我不知道如何加密。什么样的加密方法将与这样的解密方法兼容:
private byte[] padKey(byte[] key) {
byte[] paddedKey = new byte[32];
System.arraycopy(key, 0, paddedKey, 0, key.length);
return paddedKey;
}
private byte[] unpad(byte[] data) {
byte[] unpaddedData = new byte[data.length - data[data.length - 1]];
System.arraycopy(data, 0, unpaddedData, 0, unpaddedData.length);
return unpaddedData;
}
public String decrypt(String encodedJoinedData) throws Exception {
// Base64-decode the joined data
byte[] joinedData = Base64.decode(encodedJoinedData);
// Get IV and encrypted data
byte[] iv = new byte[16];
System.arraycopy(joinedData, 0, iv, 0, iv.length);
byte[] encryptedData = new byte[joinedData.length - iv.length];
System.arraycopy(joinedData, iv.length, encryptedData, 0, encryptedData.length);
// Pad key
byte[] key = padKey("SiadajerSiadajer".getBytes());
Key aesKey = new SecretKeySpec(key, "AES");
// Specify CBC-mode
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
IvParameterSpec ivParameterSpec = new IvParameterSpec(iv);
cipher.init(Cipher.DECRYPT_MODE, aesKey, ivParameterSpec);
// Decrypt data
byte[] decryptedData = cipher.doFinal(encryptedData);
// Remove custom padding
byte[] unpaddedData = unpad(decryptedData);
return new String(unpaddedData);
}发布于 2019-03-18 13:18:28
如果您正在寻找与decrypt-method对应的加密,则只需在decrypt-method中逆转该过程即可。必须在encrypt-method的正文中执行以下操作(让plainText是包含纯文本的String-parameter ):
最后,必须返回encodedJoinedData。
此外,您还必须实现自定义填充。以下方法实现了自定义的PKCS5 5填充,并可能与unpad-method相对应:
private byte[] pad(byte[] data, int size) {
byte padLength = (byte)(size - (data.length % size));
byte[] paddedData = new byte[data.length + padLength];
System.arraycopy(data, 0, paddedData, 0, data.length);
for (int i = data.length; i < paddedData.length; i++)
paddedData[i] = (byte)padLength;
return paddedData;
}顺便说一句,您的decrypt-method (以及encrypt-method)有一些问题:
decrypt/encrypt-method中打开/填充了两次,这没有任何意义。因此,移除所选的PKCS5 5填充(即从AES/CBC/PKCS5Padding更改为AES/CBC/NoPadding)或自定义填充( decrypt-和encrypt-method )(前提是在项目范围内这是可能的)。https://stackoverflow.com/questions/55216692
复制相似问题