从Base64字符串的前10个字符生成密钥

时间:2016-03-07 13:40:02

标签: java base64 aes

我们说我有一个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解密的有效密钥?

2 个答案:

答案 0 :(得分:1)

错误消息显示:密钥长度不是128/192/256位。

您正在使用10个字符,每个字符为8位。所以10 * 8 = 80。尝试使用16个字符(128/8 = 16)。

答案 1 :(得分:1)

使用哈希函数或更好的PBKDF2(基于密码的密钥派生函数2)扩展10个字符。

您确实需要提供预期长度的密钥,AES密钥长度可以是128,192或256字节。虽然一些AED实现可以使用空键,但密钥不依赖于它,但它不是标准的一部分。