[英]Generating a Key from the first 10 Characters of a Base64 String
假设我有一个Base64字符串:
data = AOUTl5C2QV2xFRPlzKR0Ag==
我想从此Base64字符串的前10个字符生成Java(Android)密钥,然后将其用于AES解密从服务器发送的消息。 为此,我使用以下代码:
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解密的有效密钥?
错误消息显示:密钥长度不是128/192/256位。
您正在使用10个字符,每个字符为8位。 所以10 * 8 = 80 尝试使用16个字符(128/8 = 16)。
使用散列函数或更好的PBKDF2(基于密码的密钥派生函数2)扩展10个字符。
您确实需要提供预期长度的密钥,AES密钥的长度可以为128、192或256个字节。 尽管某些AED实现可能使填充无效,但密钥并不依赖于此,但它不是标准的一部分。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.