का उपयोग करके मैं एस्मानेड के साथ काम कर रहा सरल एन्क्रिप्शन/डिक्रिप्शन प्राप्त करने का प्रयास कर रहा हूं, लेकिन डिक्रिप्शन स्ट्रीम को बंद करने का प्रयास करते समय मुझे अपवाद मिल रहा है। यहां स्ट्रिंग एन्क्रिप्टेड हो जाती है और सही ढंग से डिक्रिप्ट हो जाती है, और फिर मुझे क्रिप्टोग्राफिक एक्सेप्शन मिलता है "कंसोल के बाद पैडिंग अमान्य था और हटाया नहीं जा सकता"। राइटलाइन सही स्ट्रिंग को प्रिंट करता है।"पैडिंग अमान्य है और इसे हटाया नहीं जा सकता" AesManaged
कोई विचार?
MemoryStream ms = new MemoryStream();
byte[] rawPlaintext = Encoding.Unicode.GetBytes("This is annoying!");
using (Aes aes = new AesManaged())
{
aes.Padding = PaddingMode.PKCS7;
aes.Key = new byte[128/8];
aes.IV = new byte[128/8];
using (CryptoStream cs = new CryptoStream(ms, aes.CreateEncryptor(),
CryptoStreamMode.Write))
{
cs.Write(rawPlaintext, 0, rawPlaintext.Length);
cs.FlushFinalBlock();
}
ms = new MemoryStream(ms.GetBuffer());
using (CryptoStream cs = new CryptoStream(ms, aes.CreateDecryptor(),
CryptoStreamMode.Read))
{
byte[] rawData = new byte[rawPlaintext.Length];
int len = cs.Read(rawData, 0, rawPlaintext.Length);
string s = Encoding.Unicode.GetString(rawData);
Console.WriteLine(s);
}
}
मुझे एक ही समस्या थी, लेकिन रिजेंडेल मैनेज्ड (सममित) का उपयोग करके और यह नहीं पता था कि क्या हो रहा था। यह पता चला है कि 'MemoryStream.GetBuffer() 'डेटा का एक * unflushed * संस्करण प्राप्त कर रहा था, और डेटा के अधिकांश अंतिम ब्लॉक शून्य थे, जो मेरे पैडिंग के साथ गड़बड़ कर रहा था। 'मेमोरीस्ट्रीम। टोएरे()' असली सरणी प्राप्त करता है। इस समाधान के लिए बहुत धन्यवाद! – Codesleuth
यह अब तक का सबसे अच्छा/छोटा कार्यान्वयन है जिसे मैंने देखा है। – tmanthey
'निपटान' पर अच्छी कॉल। मैं CryptoStream का निपटान करने से पहले 'ms.ToArray()' को बुला रहा था। उपयोग के बाहर उस रेखा को आगे बढ़ाना मेरे लिए तय है। – cadrell0