Sistemimizde bir çok paylaşımlı işlevsellik ile çalışmak ve PCL kitaplıklarına taşımak için çalışıyoruz. PCLCrypto kullanarak bir sorun yaşıyorum. Veritabanımızda mevcut bazı verileri alıyorum ve aynı algoritma ile şifresini çözmeye çalışıyorum. Değeri geri aldım, ama sonunda sadece çöp olan 16 tane ekstra bayt var.System.Security.Cryptography vs PCLCrypto
bakınız Kod aşağıda: Eski Algoritma eski sürümünü kullanarak PCLCrypto
public static string SymmetricDecrypt(this string cipherText, string key, SymmetricAlgorithm algorithm) {
byte[] keyBuffer = Convert.FromBase64String(key.Hash(HashAlgorithm.MD5));
byte[] cipherTextBuffer = Convert.FromBase64String(cipherText);
ISymmetricKeyAlgorithmProvider symmetricAlgorithm = WinRTCrypto.SymmetricKeyAlgorithmProvider.OpenAlgorithm(PCLCrypto.SymmetricAlgorithm.AesEcb);
var symmetricKey = symmetricAlgorithm.CreateSymmetricKey(keyBuffer);
var decryptor = WinRTCrypto.CryptographicEngine.CreateDecryptor(symmetricKey);
byte[] plainTextBuffer = decryptor.TransformFinalBlock(cipherTextBuffer, 0, cipherTextBuffer.Length);
return UTF8Encoding.UTF8.GetString(plainTextBuffer, 0, plainTextBuffer.Length);
}
kullanılarak
public static string SymmetricEncrypt(this string plaintext, string key, SymmetricAlgorithm algorithm)
{
byte[] keyBuffer = Convert.FromBase64String(key.Hash(HashAlgorithm.MD5));
byte[] plainTextBuffer = Encoding.UTF8.GetBytes(plaintext);
var symmetricAlgorithm = new AesCryptoServiceProvider();
symmetricAlgorithm.Key = keyBuffer;
symmetricAlgorithm.Mode = CipherMode.ECB;
var encryptor = symmetricAlgorithm.CreateEncryptor();
byte[] cipherBuffer = encryptor.TransformFinalBlock(plainTextBuffer, 0, plainTextBuffer.Length);
symmetricAlgorithm.Clear();
return Convert.ToBase64String(cipherBuffer);
}
public static string SymmetricDecrypt(this string cipherText, string key, SymmetricAlgorithm algorithm)
{
byte[] keyBuffer = Convert.FromBase64String(key.Hash(HashAlgorithm.MD5));
byte[] cipherTextBuffer = Convert.FromBase64String(cipherText);
var symmetricAlgorithm = new AesCryptoServiceProvider();
symmetricAlgorithm.Key = keyBuffer;
symmetricAlgorithm.Mode = CipherMode.ECB;
var decryptor = symmetricAlgorithm.CreateDecryptor();
byte[] plainTextBuffer = decryptor.TransformFinalBlock(cipherTextBuffer, 0, cipherTextBuffer.Length);
symmetricAlgorithm.Clear();
return Encoding.Default.GetString(plainTextBuffer);
}
Şifre çözme System.Security.Cryptography kullanarak: plainTextBuffer 16 byte, yeni versiyonu 32 bayt.
Yardım!
Etkin bir GitHub projesidir, böylece yazarlarına ulaşmak için bir sorunu bildirmeniz gerekir. –
Gönderdiğiniz kodun en alt satırında, plainTextBuffer yazmanız gerektiği anlamına gelir. Buradaki zorluk, GitHub projesinin sadece diğer API'lere erişmesi ve kendi AES'lerini gerçekleştirmemesidir. Ama bunu söylediğimde, bu davranış için ne depoda ne de kodunuzda bir neden bulamıyorum. Garip, siz düzlemselTextBuffer'ı, algoritmanın gerçek blok boyutundan daha büyük bir zamanda geri döndürmediğimi düşündüğüm bir işlev olan TransformFinalBlock çağrısında bildiriyorsunuz, ancak bu ekstra baytlarınız var. Stumped olduğumu söylediğim için üzgünüm. – WDS