gpt4 book ai didi

java - JAVA TripleDES 函数的 PHP 模拟

转载 作者:太空宇宙 更新时间:2023-11-04 07:04:39 25 4
gpt4 key购买 nike

我有一个示例 Java 函数,想为 PHP 做一个类似的函数:

public static string Encrypt(string plainText, string key)
{
byte[] byteKey = new ASCIIEncoding().GetBytes(key);


MemoryStream mStream = new MemoryStream();

// Create a CryptoStream using the MemoryStream
// and the passed key and initialization vector (IV).
CryptoStream cStream = new CryptoStream(mStream,
new TripleDESCryptoServiceProvider().CreateEncryptor(byteKey, byteKey),
CryptoStreamMode.Write);

// Convert the passed string to a byte array.
byte[] toEncrypt = new ASCIIEncoding().GetBytes(plainText);

// Write the byte array to the crypto stream and flush it.
cStream.Write(toEncrypt, 0, toEncrypt.Length);
cStream.FlushFinalBlock();

// Get an array of bytes from the
// MemoryStream that holds the
// encrypted data.
byte[] ret = mStream.ToArray();

// Close the streams.
cStream.Close();
mStream.Close();

return Convert.ToBase64String(ret);
}

这是我的 PHP 函数,但它没有给出确切的结果:

function Encrypt($data, $secret)
{
//Generate a key from a hash
$key = md5(utf8_encode($secret), true);

//Take first 8 bytes of $key and append them to the end of $key.
$key .= substr($key, 0, 8);

//Pad for PKCS7
$blockSize = mcrypt_get_block_size('tripledes', 'ecb');
$len = strlen($data);
$pad = $blockSize - ($len % $blockSize);
$data .= str_repeat(chr($pad), $pad);

//Encrypt data
$encData = mcrypt_encrypt('tripledes', $key, $data, 'ecb');

return base64_encode($encData);

}

我尝试加密的字符串是:

Java 生成的字符串:i00KAKI7U0L7fyvrEnDdB7DtaJNO1HuwRh0/J5aWnCQ=
PHP 生成的字符串:6065L3jC5Oji8NAVzipA4OZZ102j1zFd/KfLgAdnRX0=

非常感谢任何帮助

最佳答案

似乎没有以相同的方式使用密码。在您的 Java 代码中,您使用 IV用于加密,而您没有在 PHP 代码中执行相同的操作。那是因为ECB ,您在 PHP 代码中指定的模式不需要任何初始化,而您在 Java 中使用的任何模式则需要。

您使用什么库?如前所述here这里是 Microsoft 库的引用,看起来 very similar对于您使用 Java 的加密模式,默认加密模式是 CBC (通常被认为比欧洲央行更安全)。您的图书馆很可能也在使用 CBC。

如果想要相同的结果,就需要使用相同的加密模式。因此,要么在 PHP 代码中设置 CBC(以及在 Java 中使用的相同 IV),要么使用 TripleDESCryptoServiceProvider 在 Java 中设置 ECB 模式。

关于java - JAVA TripleDES 函数的 PHP 模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21598379/

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