हम अपने सिस्टम में बहुत सी साझा कार्यक्षमता को कम करने और पीसीएल पुस्तकालयों को पोर्ट करने की प्रक्रिया में हैं। मुझे पीसीएलक्रिप्टो का उपयोग कर कोई समस्या है। मैं अपने डेटाबेस में कुछ मौजूदा डेटा ले रहा हूं, और उसी एल्गोरिदम के साथ इसे डिक्रिप्ट करने का प्रयास कर रहा हूं। मुझे मूल्य वापस मिल जाता है, लेकिन अंत में 16 अतिरिक्त बाइट्स हैं जो सिर्फ कचरे हैं।सिस्टम। सुरक्षा। क्रिप्टोग्राफी बनाम पीसीएलक्रिप्टो
देखें कोड नीचे: पुराने एल्गोरिथ्म का उपयोग कर System.Security.Cryptography 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);
}
का उपयोग कर पुराने संस्करण का उपयोग करते हुए
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);
}
डिक्रिप्शन: plainTextBuffer 16 बाइट्स, नया संस्करण है यह 32 बाइट्स है।
सहायता!
यह एक सक्रिय गिटहब प्रोजेक्ट है, इसलिए आपको अपने लेखकों तक पहुंचने के लिए एक समस्या की रिपोर्ट करनी चाहिए। –
आपके पोस्ट किए गए कोड की बहुत नीचे की रेखा पर, मुझे लगता है कि आप plainTextBuffer टाइप करना चाहते हैं, सादा पाठ नहीं। यहां कठिनाई यह है कि गिटहब परियोजना सिर्फ अन्य एपीआई तक पहुंच रही है और अपने स्वयं के एईएस को लागू नहीं करती है। लेकिन कहा कि, मुझे इस व्यवहार के लिए भंडार में और न ही आपके कोड में कोई कारण नहीं मिल रहा है। अजीब, आप TransformFinalBlock को कॉल में plainTextBuffer घोषित करते हैं, एक ऐसा फ़ंक्शन जिसे मैंने कभी भी एल्गोरिदम के वास्तविक ब्लॉक आकार से बड़ा नहीं किया है, फिर भी आपके पास उन अतिरिक्त बाइट्स हैं। मुझे खेद है कि मैं स्टंप हूं। – WDS