gpt4 book ai didi

java - JAVA和PHP AES加密之间的区别

转载 作者:太空宇宙 更新时间:2023-11-04 12:37:18 26 4
gpt4 key购买 nike

我需要在 JAVA 应用程序和 PHP 网站之间交换加密数据。这是用于加密数据的代码:

private static SecretKeySpec createKeyFromString(String plainKey) {

MessageDigest sha = null;
byte[] key;
SecretKeySpec secretKey = null;

try {

key = plainKey.getBytes("UTF-8");
sha = MessageDigest.getInstance("SHA-1");
key = sha.digest(key);
key = Arrays.copyOf(key, 16);

secretKey = new SecretKeySpec(key, "AES");

} catch(NoSuchAlgorithmException e) {
e.printStackTrace();
} catch(UnsupportedEncodingException e) {
e.printStackTrace();
}

return secretKey;

}

private static String AESCrypt(String password, SecretKeySpec secretKey) {
try {

Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5PADDING");
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
return Base64.getEncoder().encodeToString(cipher.doFinal(password.getBytes("UTF-8")));

} catch (Exception e) {
System.out.println(e.toString());
}
return null;
}


public static void main(String[] args) {

System.out.println(Pay.AESCrypt("password", Pay.createKeyFromString("key")));

}

该程序的输出是:

aRtcSG0H5u9v7xVYClnYIw==

我尝试使用以下代码在 PHP 中复制此行为:

function createKeyFromString($key) {
return substr(hash('sha1', $key), 0, 16);
}

echo openssl_encrypt("password", "AES-128-ECB", createKeyFromString("key"));

但是我得到了这个输出:

pE3cPGDFjM9vwWZ3EO8xDg==

我有点不明白为什么我会得到一个不同的加密字符串。我尝试使用此函数在 PHP 中填充要加密的数据:

function pkcs5_pad($text) {
$size = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB);
$pad = $size - (strlen($text) % $size);
return $text . str_repeat(chr($pad), $pad);
}

echo openssl_encrypt(pkcs5_pad("password"), "AES-128-ECB", createKeyFromString("key"));

但是还是不行。

最佳答案

我缺少 PHP 哈希函数中的第三个参数来获取原始输出而不是十六进制版本。

关于java - JAVA和PHP AES加密之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37188683/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com