Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将64个字符串转换为256 AES加密的密钥_Java_Encryption_Cryptography_Aes - Fatal编程技术网

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);