gpt4 book ai didi

java - 如何像java上的代码一样加密php上的字符串?

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

对于一个项目,我应该加密 php 上的字符串,就像加密 java 端的代码块一样。下面是java代码。 “input”为要加密的字符串,“key”为加密 key 。

    MessageDigest digest;
try {
digest = MessageDigest.getInstance("MD5");
byte[] md5key = digest.digest(key.getBytes("UTF-8"));
Cipher cipher = Cipher.getInstance("DESEDE/ECB/PKCS5Padding");
SecretKeySpec myKey = new SecretKeySpec(md5key, "DESede");
cipher.init(Cipher.ENCRYPT_MODE, myKey);

try {
byte[] encryptedPlainText = cipher.doFinal(input.getBytes());

String encrypted = Base64.encodeToString(encryptedPlainText, 0);
return encrypted;

}
}

这是我尝试加密字符串的 php 代码。 “encryptText_3des”函数获取字符串和 key ,并返回加密后的字符串。

function encryptText_3des($plainText, $key) {
$key = hash("md5", $key, true);
$padded = pkcs5_pad($plainText, mcrypt_get_block_size(MCRYPT_3DES, MCRYPT_MODE_ECB));
$encrypted = base64_encode(mcrypt_encrypt(MCRYPT_3DES, $key, $padded, MCRYPT_MODE_ECB));
return $encrypted;
}

function pkcs5_pad ($text, $blocksize)
{
$pad = $blocksize - (strlen($text) % $blocksize);
return $text . str_repeat(chr($pad), $pad);
}

java和php代码的输出字符串不一样。我错过了什么?

谢谢...

最佳答案

问题在于 PHP 似乎使用了它自己的专有 key 扩展机制。它不是使用 16 个字节作为 DES ABA key (16 个字节),而是简单地使用 0 个值字符扩展 key ,直到它有 24 个字节可用作 DES ABC key 。

如果您想要使用 16 字节 key 的 DES EDE,那么您应该在 key 末尾重复 key 的前 8 个字节(从 MD5 检索):

$key = hash("md5", $key, true);
$key = $key . substr($key, 0, 8);

关于java - 如何像java上的代码一样加密php上的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27530067/

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