示例#1
0
        private async Task DecryptAsync(string source, string destination)
        {
            var aes = new AESEncryptionProvider();

            aes.ProgressChanged += Decryption_ProgressChanged;

            await aes.DecryptFileAsync(source, destination, SecureSettings.EncryptionPassword);
        }
示例#2
0
        public void Encrypt_L256_WithSalt_Test()
        {
            var key = AESEncryptionProvider.CreateKey();
            var s   = AESEncryptionProvider.Encrypt("实现中华民族伟大复兴的中国梦", key.Key, key.IV, "12345678", keySize: AESKeySizeTypes.L256);
            var o   = AESEncryptionProvider.Decrypt(s, key.Key, key.IV, "12345678", keySize: AESKeySizeTypes.L256);

            Assert.Equal("实现中华民族伟大复兴的中国梦", o);
        }
示例#3
0
        public void Encrypt_L192_Test()
        {
            var key = AESEncryptionProvider.CreateKey();
            var s   = AESEncryptionProvider.Encrypt("实现中华民族伟大复兴的中国梦", key.Key, key.IV, keySize: AESKeySizeTypes.L192);
            var o   = AESEncryptionProvider.Decrypt(s, key.Key, key.IV, keySize: AESKeySizeTypes.L192);

            Assert.Equal("实现中华民族伟大复兴的中国梦", o);
        }
示例#4
0
        public void Test_Encrypt_L256_WithSalt()
        {
            var key = AESEncryptionProvider.CreateKey(AESKeySizeType.L256);
            var s1  = AESEncryptionProvider.Encrypt("仙剑蜀山", key.Key, key.IV, "12345678", keySize: AESKeySizeType.L256);
            var o1  = AESEncryptionProvider.Decrypt(s1, key.Key, key.IV, "12345678", keySize: AESKeySizeType.L256);

            Assert.Equal("仙剑蜀山", o1);
        }
示例#5
0
        public void Test_Encrypt_L192()
        {
            var key = AESEncryptionProvider.CreateKey(AESKeySizeType.L192);
            var s1  = AESEncryptionProvider.Encrypt("仙剑蜀山", key.Key, key.IV, keySize: AESKeySizeType.L192);
            var o1  = AESEncryptionProvider.Decrypt(s1, key.Key, key.IV, keySize: AESKeySizeType.L192);

            Assert.Equal("仙剑蜀山", o1);
        }
示例#6
0
        public void Encrypt_L128_WithSalt_Test()
        {
            var key = AESEncryptionProvider.CreateKey();
            var s1  = AESEncryptionProvider.Encrypt("实现中华民族伟大复兴的中国梦", key.Key, key.IV, "12345678", keySize: AESKeySizeTypes.L128);
            var o1  = AESEncryptionProvider.Decrypt(s1, key.Key, key.IV, "12345678", keySize: AESKeySizeTypes.L128);

            //Assert.Equal("image", o0);
            Assert.Equal("实现中华民族伟大复兴的中国梦", o1);
        }
示例#7
0
        public void AESEncryptionProvider_Should_Generate_ValidKey()
        {
            IEncryptionProvider enc = new AESEncryptionProvider();
            string key = enc.GenerateKey();

            Assert.NotNull(key);
            Assert.True(key.Length > 0);
            //Key sizes	128, 192 or 256 bits
            Assert.True(Convert.FromBase64String(key).Length >= 128 / 8);
        }
示例#8
0
        public void Encrypt_L128_Test()
        {
            var key = AESEncryptionProvider.CreateKey();
            //var s0 = AESEncryptionProvider.Encrypt("image", key);
            var s1 = AESEncryptionProvider.Encrypt("实现中华民族伟大复兴的中国梦", key.Key, key.IV, keySize: AESKeySizeTypes.L128);
            //Assert.Equal("en1cF/ZazqA+y3oIuJNb/Q==", s0);
            //Assert.Equal("en1cF/ZazqA+y3oIuJNb/Q==", s1);
            //var o0 = AESEncryptionProvider.Decrypt(s0, key);
            var o1 = AESEncryptionProvider.Decrypt(s1, key.Key, key.IV, keySize: AESKeySizeTypes.L128);

            //Assert.Equal("image", o0);
            Assert.Equal("实现中华民族伟大复兴的中国梦", o1);
        }
示例#9
0
        static void Main()
        {
            //Console.WriteLine(Int2Bin(10, 8));
            //Console.WriteLine(Int2Bin(1234, 32));

            //var a = LoopLeftShift(1234, 5);
            //Console.WriteLine(Int2Bin(a, 32));

            //Console.WriteLine("LFSR");
            //var LFSR = KeyLoading(0, 0);
            //foreach (var i in LFSR)
            //{
            //    Console.WriteLine("{0:X}", i);
            //}

            //Console.WriteLine("X-BitRec");
            //var X = BitRec(LFSR);
            //foreach (var i in X)
            //{
            //    Console.WriteLine("{0:X}", i);
            //}

            //Console.WriteLine("S");
            //var b = S(X[0]);
            //Console.WriteLine(b);

            //Console.WriteLine("========================");
            //var (LFSR2, R21, R22) = Init(0, 0);
            //var (LFSR3, R31, R32, Z) = Work(LFSR2, R21, R22);
            //Console.WriteLine("{0:X}", Z);

            var o  = "实现中华民族伟大复兴的中国梦";
            var b  = Encoding.UTF8.GetBytes(o);
            var ka = AESEncryptionProvider.FastCreateKey();
            var kd = DESEncryptionProvider.FastCreateKey();
            var kt = TripleDESEncryptionProvider.FastCreateKey();
            var sa = AESEncryptionProvider.FastDecrypt(AESEncryptionProvider.FastEncrypt(b, ka), ka);
            var sd = DESEncryptionProvider.FastDecrypt(DESEncryptionProvider.FastEncrypt(b, kd), kd);
            var st = TripleDESEncryptionProvider.FastDecrypt(TripleDESEncryptionProvider.FastEncrypt(b, kt), kt);

            var oa = Encoding.UTF8.GetString(sa);
            var od = Encoding.UTF8.GetString(sd);
            var ot = Encoding.UTF8.GetString(st);

            Console.WriteLine(o == oa ? "A=Yes" : "A=No");
            Console.WriteLine(o == od ? "D=Yes" : "D=No");
            Console.WriteLine(o == ot ? "T=Yes" : "T=No");

            Console.ReadLine();
        }
示例#10
0
        public void AESEncryptionProvider_Should_Encrypt_Decrypt_Correctly()
        {
            IEncryptionProvider enc = new AESEncryptionProvider();

            for (int i = 0; i < 100; i++)
            {
                string plainText     = Lorem.Paragraph(120);
                string key           = enc.GenerateKey();
                string cipherText    = enc.Encrypt(plainText, key);
                string decryptedText = enc.Decrypt(cipherText, key);

                Assert.Equal(plainText, decryptedText);
            }
        }
示例#11
0
        private async Task EncryptAsync(string source, string destination)
        {
            var dir = Path.GetDirectoryName(destination);

            if (!Directory.Exists(dir))
            {
                using (
                    new NetworkShareConnection(SecureSettings.FileShareDirectory, SecureSettings.FileShareCredentials))
                {
                    Directory.CreateDirectory(dir);
                }
            }

            var aes = new AESEncryptionProvider();

            aes.ProgressChanged += Encryption_ProgressChanged;

            using (new NetworkShareConnection(SecureSettings.FileShareDirectory, SecureSettings.FileShareCredentials))
            {
                await aes.EncryptFileAsync(source, destination, SecureSettings.EncryptionPassword);
            }
        }
示例#12
0
        static void Main()
        {
            Directory.CreateDirectory("_test");

            bool writeArchive = true;
            bool useOldWriter = false;
            bool readArchive  = true;
            bool useOldReader = false;

            if (writeArchive)
            {
                if (useOldWriter)
                {
                    using (var stream = new FileStream(@"_test\test.7z", FileMode.Create, FileAccess.ReadWrite, FileShare.Delete))
                        using (var encryption = new AESEncryptionProvider("test"))
                            using (var encoder = new ArchiveWriter.Lzma2Encoder(null))
                            {
                                var writer = new ArchiveWriter(stream);
                                writer.DefaultEncryptionProvider = encryption;
                                writer.ConnectEncoder(encoder);
                                string path      = Path.GetDirectoryName(typeof(Program).Assembly.Location);
                                var    directory = new DirectoryInfo(path);
                                foreach (string filename in Directory.EnumerateFiles(path))
                                {
                                    writer.WriteFile(directory, new FileInfo(filename));
                                }
                                writer.WriteFinalHeader();
                            }
                }
                else
                {
                    Task.Run(async delegate {
                        using (var archiveStream = new FileStream(@"_test\test.7z", FileMode.Create, FileAccess.ReadWrite, FileShare.Delete))
                            using (var archiveWriter = ManagedLzma.SevenZip.Writer.ArchiveWriter.Create(archiveStream, false))
                            {
                                var encoder = new ManagedLzma.SevenZip.Writer.EncoderDefinition();
                                ManagedLzma.SevenZip.Writer.EncoderNodeDefinition node1 = null;
                                ManagedLzma.SevenZip.Writer.EncoderNodeDefinition node2 = null;
                                //node1 = encoder.CreateEncoder(ManagedLzma.SevenZip.Encoders.CopyEncoderSettings.Instance);
                                //node1 = encoder.CreateEncoder(new ManagedLzma.SevenZip.Encoders.LzmaEncoderSettings(new ManagedLzma.LZMA.EncoderSettings()));
                                //node1 = encoder.CreateEncoder(new ManagedLzma.SevenZip.Encoders.Lzma2EncoderSettings(new ManagedLzma.LZMA2.EncoderSettings()));
                                node2 = encoder.CreateEncoder(new ManagedLzma.SevenZip.Writer.AesEncoderSettings(ManagedLzma.PasswordStorage.Create("test")));
                                if (node1 != null && node2 != null)
                                {
                                    encoder.Connect(encoder.GetContentSource(), node1.GetInput(0));
                                    encoder.Connect(node1.GetOutput(0), node2.GetInput(0));
                                    encoder.Connect(node2.GetOutput(0), encoder.CreateStorageSink());
                                }
                                else
                                {
                                    encoder.Connect(encoder.GetContentSource(), (node1 ?? node2).GetInput(0));
                                    encoder.Connect((node1 ?? node2).GetOutput(0), encoder.CreateStorageSink());
                                }
                                encoder.Complete();

                                var metadata = new ManagedLzma.SevenZip.Writer.ArchiveMetadataRecorder();

                                var directory = new DirectoryInfo(Path.GetDirectoryName(typeof(Program).Assembly.Location));

                                bool useDistinctEncoders = false;

                                if (useDistinctEncoders)
                                {
                                    foreach (var file in directory.EnumerateFiles())
                                    {
                                        using (var session = archiveWriter.BeginEncoding(encoder, true))
                                        {
                                            using (var fileStream = file.OpenRead())
                                            {
                                                var result = await session.AppendStream(fileStream, true);
                                                metadata.AppendFile(file.Name, result.Length, result.Checksum, file.Attributes, file.CreationTimeUtc, file.LastWriteTimeUtc, file.LastAccessTimeUtc);
                                            }

                                            // TODO: ensure that everything still aborts properly if we don't call complete
                                            await session.Complete();
                                        }
                                    }
                                }
                                else
                                {
                                    using (var session = archiveWriter.BeginEncoding(encoder, true))
                                    {
                                        foreach (var file in directory.EnumerateFiles())
                                        {
                                            using (var fileStream = file.OpenRead())
                                            {
                                                var result = await session.AppendStream(fileStream, true);
                                                metadata.AppendFile(file.Name, result.Length, result.Checksum, file.Attributes, file.CreationTimeUtc, file.LastWriteTimeUtc, file.LastAccessTimeUtc);
                                            }
                                        }

                                        // TODO: ensure that everything still aborts properly if we don't call complete
                                        await session.Complete();
                                    }
                                }

                                await archiveWriter.WriteMetadata(metadata);
                                await archiveWriter.WriteHeader();
                            }
                    }).GetAwaiter().GetResult();
                }
            }

            if (readArchive)
            {
                if (useOldReader)
                {
                    var pass = new Password("test");
                    var db   = new master._7zip.Legacy.CArchiveDatabaseEx();
                    var x    = new master._7zip.Legacy.ArchiveReader();
                    x.Open(new FileStream(@"_test\test.7z", FileMode.Open, FileAccess.Read, FileShare.Read | FileShare.Delete));
                    x.ReadDatabase(db, pass);
                    db.Fill();
                    x.Extract(db, null, pass);
                }
                else
                {
                    var file     = new FileStream(@"_test\test.7z", FileMode.Open, FileAccess.Read, FileShare.Read | FileShare.Delete);
                    var mdReader = new ManagedLzma.SevenZip.FileModel.ArchiveFileModelMetadataReader();
                    var mdModel  = mdReader.ReadMetadata(file);
                    var password = ManagedLzma.PasswordStorage.Create("test");
                    for (int sectionIndex = 0; sectionIndex < mdModel.Metadata.DecoderSections.Length; sectionIndex++)
                    {
                        var dsReader = new ManagedLzma.SevenZip.Reader.DecodedSectionReader(file, mdModel.Metadata, sectionIndex, password);
                        var mdFiles  = mdModel.GetFilesInSection(sectionIndex);
                        System.Diagnostics.Debug.Assert(mdFiles.Count == dsReader.StreamCount);
                        int k = 0;
                        while (dsReader.CurrentStreamIndex < dsReader.StreamCount)
                        {
                            var mdFile = mdFiles[dsReader.CurrentStreamIndex];
                            if (mdFile != null)
                            {
                                System.Diagnostics.Debug.Assert(mdFile.Stream.SectionIndex == sectionIndex);
                                System.Diagnostics.Debug.Assert(mdFile.Stream.StreamIndex == dsReader.CurrentStreamIndex);
                                var substream = dsReader.OpenStream();
                                using (var outstream = new FileStream(@"_test\output_" + (++k) + "_" + mdFile.Name, FileMode.Create, FileAccess.ReadWrite, FileShare.Delete))
                                {
                                    outstream.SetLength(0);
                                    if (mdFile.Offset != 0)
                                    {
                                        throw new NotImplementedException();
                                    }
                                    substream.CopyTo(outstream);
                                }
                            }
                            dsReader.NextStream();
                        }
                    }
                }
            }
        }