我試圖用AES/ECB/PKCS7Padding創建加密和解密函數。使用AES加密和解密PKCS7Padding失敗
private static byte[] INITIALIZATION_VECTOR = new byte[] { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 };
public static String encrypt(String token) {
Cipher cipher = null;
SecretKey key = null;
String tokenAsHex = null;
byte[] encryptedToken = null;
byte[] sksKey = "6iOmT2V6mnd0".getBytes(); // SecretKeySpec key.
try {
key = new SecretKeySpec(sksKey, "AES");
AlgorithmParameterSpec paramSpec = new IvParameterSpec(INITIALIZATION_VECTOR);
cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, key, paramSpec);
encryptedToken = cipher.doFinal(token.getBytes("UTF-8"));
} catch (Exception e) {
e.printStackTrace();
}
return Base64.encodeBase64String(encryptedToken);
}
public static String decrypt(String token) {
Cipher cipher = null;
SecretKey key = null;
byte[] decryptedToken = null;
byte[] sksKey = "6iOmT2V6mnd0".getBytes(); // SecretKeySpec key.
try {
key = new SecretKeySpec(sksKey, "AES");
AlgorithmParameterSpec paramSpec = new IvParameterSpec(INITIALIZATION_VECTOR);
cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, key, paramSpec);
decryptedToken = cipher.doFinal(Base64.decodeBase64(token));
} catch(Exception e){
e.printStackTrace();
}
if (decryptedToken == null) {
System.out.println("Unable to decrypt the following token: " + token);
}
return new String(decryptedToken);
}
我編輯了我的程序。
現在,dycryption似乎工作,但它只適用於PKCS5Padding,當我嘗試使用PKCS7Padding它說它找不到提供者,它怎麼可能?
請使用類似谷歌的keyczar庫來代替。它更易於使用,並且更有可能獲得安全的代碼。 –
PKCS#5和PKCS#7填充實際上是相同的。有些系統使用一個名稱,而其他系統使用另一個名稱。在你的情況下,默認提供者使用'PKCS5'名稱。基本上,不要擔心。 – rossum