【发布时间】:2019-08-08 13:05:37
【问题描述】:
我尝试在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);
}
【问题讨论】:
-
嗯,加密和解密必须使用相同的方法,所以是
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");。所有基本信息都在@Lino 建议的链接中。 -
尽管我强烈建议您阅读一下您在做什么。加密是一个广泛的领域,如果你不知道自己在做什么,很容易做出看起来安全但实际上并不安全的东西
-
我是一个初学者,我还是不知道应该怎么做
标签: java encryption byte aes