您好,我正在尝试使用带有初始 vector 和 key 的 AES 加密来加密字符串。问题是我无法生成 16 字节长的 IV。无论我做什么,它显示的 IV 都不是 16 字节,因此会引发异常。
public static String encryptString(String str){
char[] CHARSET_AZ_09 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".toCharArray();
String initialVectorString = Helper.randomString(CHARSET_AZ_09, 16);
byte[] vectorbytes = (new org.apache.commons.codec.binary.Base64()).encode(initialVectorString.getBytes());
String encryptedString = Helper.encrypt(str, initialVectorString, "mykey");
return encryptedString;
}
public static String randomString(char[] characterSet, int length) {
Random random = new SecureRandom();
char[] result = new char[length];
for (int i = 0; i < result.length; i++) {
// picks a random index out of character set > random character
int randomCharIndex = random.nextInt(characterSet.length);
result[i] = characterSet[randomCharIndex];
}
String str = new String(result);
try{
str = new String(str.getBytes(),"UTF8");
}
catch(Exception e){
}
Log.d("check",str.getBytes().length+"");
return str;
}
public static String encrypt(String data,String initialVectorString,String secretKey){
String encryptedString = null;
try{
SecretKeySpec skeySpec = new SecretKeySpec(md5(secretKey).getBytes(), "AES");
IvParameterSpec initialVector = new IvParameterSpec((new org.apache.commons.codec.binary.Base64()).decode(initialVectorString.getBytes()));
Cipher cipher = Cipher.getInstance("AES/CFB8/NoPadding");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec, initialVector);
byte[] plainTextByteArray = (new org.apache.commons.codec.binary.Base64()).decode(data.getBytes());
byte[] encryptedByteArray = cipher.doFinal(plainTextByteArray);
encryptedString = new String(encryptedByteArray, "UTF8");
}
catch (Exception e) {
Log.d("Problem decrypting the data", e.getLocalizedMessage());
}
return encryptedString;
}
有人知道如何生成 16 字节长的 IV 吗?
最佳答案
你是问如何创建一个16字节的数组吗?
byte[] iv = new byte[ 16 ];
当我们在这里时,使用它来填充随机数据:
SecureRandom random = SecureRandom.getInstance( "SHA1PRNG" );
random.nextBytes( iv );
关于java - Java 中的加密我需要一个 16 字节的初始 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22678032/