从 Base64 字符串的前 10 个字符生成密钥
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 实现可能会用空填充键不依赖于此,但它不是标准的一部分。
假设我有一个 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 实现可能会用空填充键不依赖于此,但它不是标准的一部分。