2009-06-03 9 views
21

के लिए ब्लॉक आकार से मेल नहीं खाता है मैं बेस एन्क्रिप्शन विधि पर काम कर रहा हूं। मैं रिजेंडेल मैनेज्ड का उपयोग कर रहा हूं। मुझे यह कोड कहीं से बहुत पहले मिला है, लेकिन मुझे याद नहीं है।निर्दिष्ट प्रारंभिक वेक्टर (IV) इस एल्गोरिदम

मेरे पास पहले कोड काम कर रहा था, लेकिन कुछ बदल गया और मैं इसे काफी समझ नहीं पाया।

जब मैं अपना कोड चलाता हूं, तो मुझे निम्न त्रुटि मिलती है;

निर्दिष्ट प्रारंभ वेक्टर (चतुर्थ) इस एल्गोरिथ्म के लिए ब्लॉक आकार से मेल नहीं खाता।

string textToEncrypt = "TEST STRING"; 

      int keySize = 256; 
      string hashAlgorithm = "SHA1"; 
      string passPhrase = "AH!PSB0%FGHR$"; 
      string saltValue = "LRT%YUR#[email protected]"; 
      string initVector = "HR$2pIjHR$2pIj"; 



      byte[] initVectorBytes = Encoding.ASCII.GetBytes(initVector); 
      byte[] saltValueBytes = Encoding.ASCII.GetBytes(saltValue); 

      byte[] plainTextBytes = Encoding.UTF8.GetBytes(textToEncrypt); 

      PasswordDeriveBytes password = new PasswordDeriveBytes(passPhrase, saltValueBytes, hashAlgorithm, 2); 

      byte[] keyBytes = password.GetBytes(keySize/8); 

      RijndaelManaged symmetricKey = new RijndaelManaged(); 

      symmetricKey.Mode = CipherMode.CBC; 

      ICryptoTransform encryptor = symmetricKey.CreateEncryptor(keyBytes,initVectorBytes); 

      MemoryStream memoryStream = new MemoryStream(); 

      CryptoStream cryptoStream = new CryptoStream(memoryStream,encryptor,CryptoStreamMode.Write); 
      cryptoStream.Write(plainTextBytes, 0, plainTextBytes.Length); 

      cryptoStream.FlushFinalBlock(); 

      byte[] cipherTextBytes = memoryStream.ToArray(); 

      memoryStream.Close(); 
      cryptoStream.Close(); 

      string cipherText = Convert.ToBase64String(cipherTextBytes); 

किसी भी मदद की सराहना की जाएगी:

यहाँ मेरी कोड है।

उत्तर

48

समस्या यह है कि आपका प्रारंभिक वेक्टर आकार 16 बाइट्स होना चाहिए।

आपका प्रारंभिक वेक्टर आकार 14 बाइट्स है।

आपको अपने प्रारंभिक वेक्टर के आकार को 2 बाइट्स तक बढ़ाने की आवश्यकता होगी और आपका कोड काम करेगा।

उदाहरण:

hAC8hMf3N5Zb/DZhFKi6Sg ==

यह लेख प्रदान करता है:

string initVector = "HR$2pIjHR$2pIj12"; 

तब आप अपने वर्तमान कोड के साथ उत्पादन और उदाहरण चतुर्थ (प्रारंभ वेक्टर) प्रदान की आकार मिल जाएगा प्रारंभिक वेक्टर क्या है पर एक अच्छी व्याख्या।

http://en.wikipedia.org/wiki/Initialization_vector

+0

ओह, यह था! सहायता के लिए आपका बहुत - बहुत धन्यवाद। –

9

आप कितने बाइट्स चतुर्थ का उपयोग कर किए जाने की आवश्यकता की जांच करने के लिए सक्षम होना चाहिए: आप

blocksize है बिट्स में है, इसलिए 128 बिट/8 ASCII के 16 बाइट्स देता है, और कुंजी बनाने के लिए Rfc2898DeriveBytes उपयोगी वर्ग भी मिल सकता है।

algorithm.IV = rfc2898DeriveBytesForIV.GetBytes(algorithm.BlockSize/8); 

उम्मीद है कि यह मदद करता है।

संबंधित मुद्दे