我需要帮助才能找到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。它“有效”,但结果与mcrypt_encrypt方法(PHP)不同。
您是否有任何使用我的16字节密钥和8字节IV在AES CBC模式下加密的解决方案?
感谢。 塞缪尔
答案 0 :(得分:0)
所以,我的问题在于我的字符串到字节数组的转换。我使用了以下方法(您将在其他帖子中检索)但在我的情况下它不起作用:
var bytes = Encoding.UTF8.GetBytes(hexString);
正确的方法是:
double distance = Math.sqrt((x2-x1)*(x2-x1)) = Math.abs(x2-x1)