我需要將此代碼(控制檯應用程序在C#中): Decrypt PHP encrypted string in C# WinRT代碼。我有:端口AES加密代碼WinRT
class Crypto{const string Key = "lkirwf897+22#bbtrm8814z5qq=498j5";
const string IV = "741952hheeyy66#[email protected]";
public static string Encrypt(string login)
{
var input = CryptographicBuffer.ConvertStringToBinary(login, BinaryStringEncoding.Utf8);
var key1 = CryptographicBuffer.ConvertStringToBinary(Key, BinaryStringEncoding.Utf8);
var iv = CryptographicBuffer.ConvertStringToBinary(IV, BinaryStringEncoding.Utf8);
var encryptor = SymmetricKeyAlgorithmProvider.OpenAlgorithm(SymmetricAlgorithmNames.AesCbcPkcs7);
var key2 = encryptor.CreateSymmetricKey(key1);
var encrypted = CryptographicEngine.Encrypt(key2, input, iv);
return CryptographicBuffer.ConvertBinaryToString(BinaryStringEncoding.Utf8, encrypted);
}
public static string Decrypt(string LoginToDecode)
{
var input = CryptographicBuffer.ConvertStringToBinary(LoginToDecode, BinaryStringEncoding.Utf8);
var key1 = CryptographicBuffer.ConvertStringToBinary(Key, BinaryStringEncoding.Utf8);
var iv = CryptographicBuffer.ConvertStringToBinary(IV, BinaryStringEncoding.Utf8);
var decryptor = SymmetricKeyAlgorithmProvider.OpenAlgorithm(SymmetricAlgorithmNames.AesCbcPkcs7);
var key2 = decryptor.CreateSymmetricKey(key1);
var decrypted = CryptographicEngine.Decrypt(key2, input, iv);
return CryptographicBuffer.ConvertBinaryToString(BinaryStringEncoding.Utf8, decrypted);
}}
我有加密功能的最後一行的錯誤: 附加信息:在目標多字節代碼頁中存在的Unicode字符沒有映射。 我想要獲得與上述主題相同的結果。這個解決方案可以正確無誤嗎?
UPDATE 我刪除了錯誤。代碼是:
class Crypto{const string Key = "lkirwf897+22#bbtrm8814z5qq=498j5";
const string IV = "741952hheeyy66#[email protected]";
public static string Encrypt(string login)
{
var input = CryptographicBuffer.ConvertStringToBinary(login, BinaryStringEncoding.Utf8);
var key1 = CryptographicBuffer.ConvertStringToBinary(Key, BinaryStringEncoding.Utf8);
var iv = CryptographicBuffer.ConvertStringToBinary(IV, BinaryStringEncoding.Utf8);
var encryptor = SymmetricKeyAlgorithmProvider.OpenAlgorithm(SymmetricAlgorithmNames.AesCbcPkcs7);
var key2 = encryptor.CreateSymmetricKey(key1);
var encrypted = CryptographicEngine.Encrypt(key2, input, iv);
return CryptographicBuffer.EncodeToBase64String(encrypted);
}
public static string Decrypt(string LoginToDecode)
{
var input = CryptographicBuffer.DecodeFromBase64String(LoginToDecode);
var key1 = CryptographicBuffer.ConvertStringToBinary(Key, BinaryStringEncoding.Utf8);
var iv = CryptographicBuffer.ConvertStringToBinary(IV, BinaryStringEncoding.Utf8);
var decryptor = SymmetricKeyAlgorithmProvider.OpenAlgorithm(SymmetricAlgorithmNames.AesCbcPkcs7);
var key2 = decryptor.CreateSymmetricKey(key1);
var decrypted = CryptographicEngine.Decrypt(key2, input, iv);
return CryptographicBuffer.ConvertBinaryToString(BinaryStringEncoding.Utf8, decrypted);
}
}}
但這種代碼的結果是不是像上面的題目相同。我需要這個,因爲我必須與PHP服務器進行通信。
UPDATE#2 好吧,我瞭解到,在WinRT中我只能使用128AES。於是,我改變了PHP腳本:
function decryptRJ128($key,$iv,$string_to_decrypt){
$ string_to_decrypt = BASE64_DECODE($ string_to_decrypt); $ rtn = mcrypt_decrypt(MCRYPT_RIJNDAEL_128,$ key,$ string_to_decrypt,MCRYPT_MODE_CBC,$ iv); $ rtn = rtrim($ rtn,「\ 0 \ 4」); return($ rtn);} function encryptRJ128($ key,$ iv,$ string_to_encrypt){$ rtn = mcrypt_encrypt(MCRYPT_RIJNDAEL_128,$ key,$ string_to_encrypt,MCRYPT_MODE_CBC,$ iv); $ rtn = base64_encode($ rtn);回報($ RTN);}
而對於
- 密碼= 「性Asd」
- 重點= 「lkirwf897 + 22#BBT」 這是必須16bit的
- IV = 「741952hheeyy66#C」
我在c#「eSy8m8ygN7rtC80DMdGOUQ ==」。我需要這個在PHP中。
我注意到其他的解決辦法是使用ASCII編碼,而不是統一的。 – dbugger
@dbugger好的,但我不能在WinRT中使用ASCII編碼。 – Quiet
有趣,很煩人,因爲問題在於編碼差異。 – dbugger