PHP mcrypt_encrypt 方法的 UWP 等价物
UWP equivalent for PHP mcrypt_encrypt method
我需要帮助找到 PHP mcrypt_encrypt 方法的 c# 等价物。我尝试使用 Windows.Security.Cryptography 命名空间进行 AES CBC 加密,但无法使用 8 字节 IV。
这是我的代码:
var encoding = BinaryStringEncoding.Utf8;
IBuffer buffMsg = CryptographicBuffer.ConvertStringToBinary(strToEncrypt, encoding);
var objAlg = SymmetricKeyAlgorithmProvider.OpenAlgorithm(AES_CBC);
// strToEncrypt padding
var padding = 16 - (buffMsg.Length % 16);
if (padding > 0)
{
var buffWithPadding = new byte[buffMsg.Length + padding];
buffMsg.ToArray().CopyTo(buffWithPadding, 0);
buffMsg = CryptographicBuffer.CreateFromByteArray(buffWithPadding);
}
var key = CryptographicBuffer.CreateFromByteArray(_serverKey);
var iv = CryptographicBuffer.CreateFromByteArray(ivPadding);
IBuffer buffEncrypt = CryptographicEngine.Encrypt(objAlg.CreateSymmetricKey(key), buffMsg, iv);
return CryptographicBuffer.EncodeToBase64String(buffEncrypt);
在服务器端,mcrypt_decrypt方法使用AES 128位密钥(16字节)和8字节的初始化向量。但是,对于 UWP 加密库,IV 似乎也必须具有 16 个字节的大小。
我试图用 8 个零字节填充我的 IV。它 "works" 但结果与 mcrypt_encrypt 方法(PHP)的结果不同。
你们有没有用我的 16 字节密钥和 8 字节 IV 在 AES CBC 模式下加密的解决方案?
谢谢。
塞缪尔
所以,我的问题出在字符串到字节数组的转换上。我使用了以下方法(您将在其他帖子中检索到)但它在我的情况下不起作用:
public static byte[] StringToByteArray(string hex)
{
return Enumerable.Range(0, hex.Length)
.Where(x => x % 2 == 0)
.Select(x => Convert.ToByte(hex.Substring(x, 2), 16))
.ToArray();
}
正确的方法是:
var bytes = Encoding.UTF8.GetBytes(hexString);
我需要帮助找到 PHP mcrypt_encrypt 方法的 c# 等价物。我尝试使用 Windows.Security.Cryptography 命名空间进行 AES CBC 加密,但无法使用 8 字节 IV。
这是我的代码:
var encoding = BinaryStringEncoding.Utf8;
IBuffer buffMsg = CryptographicBuffer.ConvertStringToBinary(strToEncrypt, encoding);
var objAlg = SymmetricKeyAlgorithmProvider.OpenAlgorithm(AES_CBC);
// strToEncrypt padding
var padding = 16 - (buffMsg.Length % 16);
if (padding > 0)
{
var buffWithPadding = new byte[buffMsg.Length + padding];
buffMsg.ToArray().CopyTo(buffWithPadding, 0);
buffMsg = CryptographicBuffer.CreateFromByteArray(buffWithPadding);
}
var key = CryptographicBuffer.CreateFromByteArray(_serverKey);
var iv = CryptographicBuffer.CreateFromByteArray(ivPadding);
IBuffer buffEncrypt = CryptographicEngine.Encrypt(objAlg.CreateSymmetricKey(key), buffMsg, iv);
return CryptographicBuffer.EncodeToBase64String(buffEncrypt);
在服务器端,mcrypt_decrypt方法使用AES 128位密钥(16字节)和8字节的初始化向量。但是,对于 UWP 加密库,IV 似乎也必须具有 16 个字节的大小。
我试图用 8 个零字节填充我的 IV。它 "works" 但结果与 mcrypt_encrypt 方法(PHP)的结果不同。
你们有没有用我的 16 字节密钥和 8 字节 IV 在 AES CBC 模式下加密的解决方案?
谢谢。 塞缪尔
所以,我的问题出在字符串到字节数组的转换上。我使用了以下方法(您将在其他帖子中检索到)但它在我的情况下不起作用:
public static byte[] StringToByteArray(string hex)
{
return Enumerable.Range(0, hex.Length)
.Where(x => x % 2 == 0)
.Select(x => Convert.ToByte(hex.Substring(x, 2), 16))
.ToArray();
}
正确的方法是:
var bytes = Encoding.UTF8.GetBytes(hexString);