示例#1
0
        private IAlgorithm getSessionKeyAlg(bool encryption, string password)
        {
            var        SKkey         = Serpent.generateKeyFromBytes(computeHash(password));
            var        SKiv          = Serpent.generateIV(true);
            IAlgorithm sessionKeyAlg = new Serpent(SKkey, SKiv, encryption);

            sessionKeyAlg.init(null, null, "ECB", 128);

            return(sessionKeyAlg);
        }
示例#2
0
        private IAlgorithm encryptFile(String src, String dst, String cipherMode, int segment, int sessionKeySize, String password)
        {
            // выполнение алгоритма
            // создание объекта класса algorithm (IAlgorithm)
            // вызов метода encrypt с соответствующими параметрами
            // включая поддержку индикатора выполнения и прерывания операций
            IAlgorithm alg;

            var key = Serpent.generateKey(sessionKeySize);
            //var key = Serpent.generateKeyFromBytes(Convert.FromBase64String("ZgCKtGo7pgmpRw7EFHJTGQ=="));
            var iv = Serpent.generateIV();

            // шифрование ключа сеанса Serpent / ECB паролем`password'
            var sessionKeyAlg = getSessionKeyAlg(true, password);
            var encryptedKey  = sessionKeyAlg.encryptInMemory(key.GetKey());

            // создание заголовка
            XDocument miXML = new XDocument(
                new XDeclaration("1.0", "utf-8", "yes"),
                new XElement("EncryptedFileHeader",
                             new XElement("Algorithm", "SERPENT"),
                             new XElement("CipherMode", cipherMode),
                             //new XElement("BlockSize", 128), //это постоянный нет необходимости, чтобы сохранить его
                             new XElement("SegmentSize", segment),
                             new XElement("KeySize", sessionKeySize),
                             new XElement("EncryptedKey", Convert.ToBase64String(encryptedKey)),
                             new XElement("IV", Convert.ToBase64String(iv))
                             )
                );

            using (StreamWriter sw = new StreamWriter(dst, false, Encoding.ASCII))
            {
                miXML.Save(sw);
                sw.WriteLine();
            }
            long xmlSize = new FileInfo(dst).Length;

            // сохранение заголовка
            var headerOffset = xmlSize;

            // шифрование
            alg = new Serpent(key, iv, true);
            alg.init(src, dst, cipherMode, segment, 0, headerOffset);

            return(alg);
        }