-1
我需要幫助才能找到c#相當於PHP mcrypt_encrypt方法。我嘗試使用Windows.Security.Cryptography命名空間進行AES CBC加密,但不可能使用8字節的IV。UWP等價於PHP mcrypt_encrypt方法
這是我的代碼:
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。它「有效」,但結果與PHP的mcrypt_encrypt方法不一樣。
你有任何解決方案使用我的16字節密鑰和我的8字節IV在AES CBC模式下進行加密嗎?
感謝。 Samuel
請出示所有的PHP代碼必要的輸入數據以及輸出。 –
我無法在論壇上發佈AES密鑰和IV(...)。但是當然,我使用相同的AES密鑰和相同的IV。模式是CBC。 –
此外,Android(所以java)AES類找到了與php方法相同的結果。但是UWP中的問題是傳遞8個字節的IV。 –