如何使用 aescbc 在 php5 中加密并在 windows 存储 8.1 和 c# 中解密
How to encrypt in php5 and decrypt in windows store 8.1 and c# using aescbc
大家好,我已经使用 AesCbc 方法对 PHP 中字符串中的单词 hello 进行了加密。这是我的代码。
base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_128,'1234567890123456',pkcs7_pad('hello', 16),MCRYPT_MODE_CBC))
结果是
67fHA+Z12z2jlwOLTBeCPA==
然后我将这个结果发送到我的 windows 商店应用程序,这是我用来解密它的函数。
public string AES_Decrypt(string input, string pass)
{
SymmetricKeyAlgorithmProvider SAP = SymmetricKeyAlgorithmProvider.OpenAlgorithm(SymmetricAlgorithmNames.AesCbc);
CryptographicKey AES;
HashAlgorithmProvider HAP = HashAlgorithmProvider.OpenAlgorithm(HashAlgorithmNames.Md5);
CryptographicHash Hash_AES = HAP.CreateHash();
string decrypted = "";
try
{
byte[] hash = new byte[32];
Hash_AES.Append(CryptographicBuffer.CreateFromByteArray(System.Text.Encoding.UTF8.GetBytes(pass)));
byte[] temp;
CryptographicBuffer.CopyToByteArray(Hash_AES.GetValueAndReset(), out temp);
Array.Copy(temp, 0, hash, 0, 16);
Array.Copy(temp, 0, hash, 15, 16);
AES = SAP.CreateSymmetricKey(CryptographicBuffer.CreateFromByteArray(hash));
IBuffer Buffer = CryptographicBuffer.DecodeFromBase64String(input);
byte[] Decrypted;
CryptographicBuffer.CopyToByteArray(CryptographicEngine.Decrypt(AES,Buffer,null), out Decrypted);
decrypted = System.Text.Encoding.UTF8.GetString(Decrypted, 0, Decrypted.Length);
return decrypted;
}
catch (Exception ex)
{
return null;
}
}
结果是这样的
7��t�\a2H[=15=]��g
什么时候应该 "hello"。
那么我的代码哪里出错了?
密钥未在您的 PHP 代码中进行哈希处理。所以,不要在 C# 中这样做:
AES = SAP.CreateSymmetricKey(CryptographicBuffer.CreateFromByteArray(
System.Text.Encoding.UTF8.GetBytes(pass)
));
大家好,我已经使用 AesCbc 方法对 PHP 中字符串中的单词 hello 进行了加密。这是我的代码。
base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_128,'1234567890123456',pkcs7_pad('hello', 16),MCRYPT_MODE_CBC))
结果是
67fHA+Z12z2jlwOLTBeCPA==
然后我将这个结果发送到我的 windows 商店应用程序,这是我用来解密它的函数。
public string AES_Decrypt(string input, string pass)
{
SymmetricKeyAlgorithmProvider SAP = SymmetricKeyAlgorithmProvider.OpenAlgorithm(SymmetricAlgorithmNames.AesCbc);
CryptographicKey AES;
HashAlgorithmProvider HAP = HashAlgorithmProvider.OpenAlgorithm(HashAlgorithmNames.Md5);
CryptographicHash Hash_AES = HAP.CreateHash();
string decrypted = "";
try
{
byte[] hash = new byte[32];
Hash_AES.Append(CryptographicBuffer.CreateFromByteArray(System.Text.Encoding.UTF8.GetBytes(pass)));
byte[] temp;
CryptographicBuffer.CopyToByteArray(Hash_AES.GetValueAndReset(), out temp);
Array.Copy(temp, 0, hash, 0, 16);
Array.Copy(temp, 0, hash, 15, 16);
AES = SAP.CreateSymmetricKey(CryptographicBuffer.CreateFromByteArray(hash));
IBuffer Buffer = CryptographicBuffer.DecodeFromBase64String(input);
byte[] Decrypted;
CryptographicBuffer.CopyToByteArray(CryptographicEngine.Decrypt(AES,Buffer,null), out Decrypted);
decrypted = System.Text.Encoding.UTF8.GetString(Decrypted, 0, Decrypted.Length);
return decrypted;
}
catch (Exception ex)
{
return null;
}
}
结果是这样的
7��t�\a2H[=15=]��g
什么时候应该 "hello"。 那么我的代码哪里出错了?
密钥未在您的 PHP 代码中进行哈希处理。所以,不要在 C# 中这样做:
AES = SAP.CreateSymmetricKey(CryptographicBuffer.CreateFromByteArray(
System.Text.Encoding.UTF8.GetBytes(pass)
));