Java 如何将64个字符串转换为256 AES加密的密钥
引发异常:Java 如何将64个字符串转换为256 AES加密的密钥,java,encryption,cryptography,aes,Java,Encryption,Cryptography,Aes,引发异常:java.security.InvalidKeyException:Invalid AES密钥长度:64字节您应该尝试使用十六进制解码器解码密钥,而不是调用getBytes()您应该尝试使用十六进制解码器解码密钥,而不是调用getBytes()调用字符串.getBytes()()时,使用平台的默认字符集将给定字符串的字符编码为字节序列 实际上,您需要做的是将每个十六进制(也以16为基数)数字(由两个字符表示,从0到9和A到F,例如1A,99等)转换为相应的数值(byte),例如“FF”
java.security.InvalidKeyException:Invalid AES密钥长度:64字节
您应该尝试使用十六进制解码器解码密钥,而不是调用getBytes()
您应该尝试使用十六进制解码器解码密钥,而不是调用getBytes()
调用字符串.getBytes()
()时,使用平台的默认字符集将给定字符串的字符编码为字节序列
实际上,您需要做的是将每个十六进制(也以16为基数)数字(由两个字符表示,从0
到9
和A
到F
,例如1A
,99
等)转换为相应的数值(byte
),例如“FF”
-1字节
示例代码如下所示:
导入静态java.lang.Character.digit;
...
专用静态字节[]stringToBytes(字符串输入){
int length=input.length();
字节[]输出=新字节[长度/2];
对于(int i=0;i 输出[i/2]=(字节)((数字(input.charAt(i),16)当调用String.getBytes()
)时,使用平台的默认字符集将给定字符串的字符编码为字节序列
您实际需要做的是将每个十六进制(也以16为基数)数字(由两个字符表示,从0
到9
和A
到F
,例如1A
,99
等)转换为相应的数值(byte
),例如“FF”
->-1
字节
示例代码如下所示:
导入静态java.lang.Character.digit;
...
专用静态字节[]stringToBytes(字符串输入){
int length=input.length();
字节[]输出=新字节[长度/2];
对于(int i=0;i 输出[i/2]=(字节)((数字(input.charAt(i),16)BarryMessage
与AES/ECB不兼容,您的代码甚至无法编译。请制作一个SSCCE。您需要从十六进制转换。getBytes
使用默认的平台编码。请参阅@CodesInChaos,距离我的答案还有3秒:)或者请参阅barryMessage
与AES/ECB不兼容,您的代码甚至无法编译。请制作一个SSCCE。您需要从十六进制转换。getBytes
使用默认的平台编码。请参阅@CodesInChaos,距离我的答案还有3秒:)或者查看感谢回复。在我审阅后,我将认可答案。再次感谢!感谢回复。在我审阅后,我将认可答案。再次感谢!
public static byte[] decryptByte(byte[] blahh, byte[] keyExample) throws Exception
{
Cipher cipher = null;
try
{
cipher = Cipher.getInstance("AES/ECB/PKCS5PADDING");
SecretKeySpec secretKey = new SecretKeySpec(key, "AES");
cipher.init(Cipher.DECRYPT_MODE, secretKey);
return cipher.doFinal(Base64.decodeBase64(blah));
}
catch(Exception e)
{
e.printStackTrace();
}
return null;
}
String keyExample = "99112277445566778899AABBCCDDEEFF0123456789ABCDEF0123456789ABCDEF";
byte[] key = keyExample.getBytes();
byte[] barrayMessage = {123,45,55,23,64,21,65};
byte[] result = decryptByte(barrayMessage, key);
import static java.lang.Character.digit;
...
private static byte[] stringToBytes(String input) {
int length = input.length();
byte[] output = new byte[length / 2];
for (int i = 0; i < length; i += 2) {
output[i / 2] = (byte) ((digit(input.charAt(i), 16) << 4) | digit(input.charAt(i+1), 16));
}
return output;
}
...
String keyExample = "99112277445566778899AABBCCDDEEFF0123456789ABCDEF0123456789ABCDEF";
byte[] key = stringToBytes(keyExample);
byte[] barrayMessage = {123,45,55,23,64,21,65};
byte[] result = decryptByte(barrayMessage, key);