我们说我有一个Base64字符串:
data = AOUTl5C2QV2xFRPlzKR0Ag==
我想从此Base64字符串的前10个字符生成Java(Android)中的密钥,然后将其用于AES-Decrypt从服务器发送的消息。为此,我使用以下代码:
String firstTen = data.substring(0, 10);
byte[] decodedBytes = Base64.decode(firstTen, Base64.DEFAULT);
SecretKeySpec key = new SecretKeySpec(decodedBytes, "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, key);
byte[] original = cipher.doFinal(Message_to_Decrypt, Base64.DEFAULT));
但是我可以使用Java.security.Exception:
java.security.InvalidKeyException: Key length not 128/192/256 bits.
有没有办法可以从Base64String的前10个字符中获得一个可用于AES解密的有效密钥?
答案 0 :(得分:1)
错误消息显示:密钥长度不是128/192/256位。
您正在使用10个字符,每个字符为8位。所以10 * 8 = 80。尝试使用16个字符(128/8 = 16)。
答案 1 :(得分:1)
使用哈希函数或更好的PBKDF2(基于密码的密钥派生函数2)扩展10个字符。
您确实需要提供预期长度的密钥,AES密钥长度可以是128,192或256字节。虽然一些AED实现可以使用空键,但密钥不依赖于它,但它不是标准的一部分。