gpt4 book ai didi

C# 加密 (AesManaged) 到 PHP 等效

转载 作者:行者123 更新时间:2023-11-30 20:57:34 25 4
gpt4 key购买 nike

我有一些由我们的第三方提供的数据,这些数据使用 C# 算法加密。请看下面:

using System.Security.Cryptography;

private static int KEY_SIZE = 32;
private static byte[] IV = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };

public static string EncryptString(string plaintext, string password)
{
byte[] key = new byte[KEY_SIZE];
byte[] passwordbytes = Encoding.UTF8.GetBytes(password);

for (int i = 0; i < KEY_SIZE; i++)
{
if (i >= passwordbytes.Length)
key[i] = 0;
else
key[i] = passwordbytes[i];
}

byte[] encrypted;

// Create an AesCryptoServiceProvider object
// with the specified key and IV.
using (AesManaged aesAlg = new AesManaged())
{
aesAlg.Mode = CipherMode.CBC;
aesAlg.KeySize = KEY_SIZE * 8;

// Create a decrytor to perform the stream transform.
ICryptoTransform encryptor = aesAlg.CreateEncryptor(key, IV);

// Create the streams used for encryption.
using (MemoryStream msEncrypt = new MemoryStream())
{
using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
{
using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
{
//Write all data to the stream.
swEncrypt.Write(plaintext);
}
encrypted = msEncrypt.ToArray();
}
}
}

return Convert.ToBase64String(encrypted);
}

我想用 PHP 编写解密。我还获得了一个他们称之为“AES256 加密 key ”的 key 。

另外他们提供给我的C#解密算法如下:

public static string DecryptString(string cipherText, string password)
{
byte[] key = new byte[KEY_SIZE];
byte[] passwordbytes = Encoding.UTF8.GetBytes(password);

for (int i = 0; i < KEY_SIZE; i++)
{
if (i >= passwordbytes.Length)
key[i] = 0;
else
key[i] = passwordbytes[i];
}

byte[] CipherTextBytes = Convert.FromBase64String(cipherText);

// Declare the string used to hold
// the decrypted text.
string plaintext = null;

// Create an AesCryptoServiceProvider object
// with the specified key and IV.
using (AesManaged aesAlg = new AesManaged())
{
aesAlg.Mode = CipherMode.CBC;
aesAlg.KeySize = KEY_SIZE * 8;

// Create a decrytor to perform the stream transform.
ICryptoTransform decryptor = aesAlg.CreateDecryptor(key, IV);

// Create the streams used for decryption.
using (MemoryStream msDecrypt = new MemoryStream(CipherTextBytes))
{
using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
{
using (StreamReader srDecrypt = new StreamReader(csDecrypt))
{
// Read the decrypted bytes from the decrypting stream
// and place them in a string.
plaintext = srDecrypt.ReadToEnd();
}
}
}

}
return plaintext;
}

但我想用 PHP 编写解密。由于我对加密的东西很陌生,请指导我正确的方向。

非常感谢....

最佳答案

我们得出如下结论。我希望它对某人有用。

function encrypt($string = '', $key = '') {
$key = utf8_encode($key);

//make it 32 chars long. pad with \0 for shorter keys
$key = str_pad($key, 32, "\0");

//make the input string length multiples of 16. This is necessary
$padding = 16 - (strlen($string) % 16);
$string .= str_repeat(chr($padding), $padding);

//emtpy IV - initialization vector
$iv = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";

$encrypted = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $string, MCRYPT_MODE_CBC, $iv));
return rtrim($encrypted);
}

function decrypt($string = '', $key = '') {
$key = $key . "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";
$iv = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";
$string = base64_decode($string);

return mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $string, MCRYPT_MODE_CBC, $iv);
}

关于C# 加密 (AesManaged) 到 PHP 等效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16734423/

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