密码加密(一)

一:举例

        账号,密码都是我们经常用到的,在注册一新账号时,还得填写密码,当你注册成功的时候,那个密码是已经加密了,只是在你眼里就是一个正常的密码,或者一串字母加一串数字而已,当然没经过加密也是这样,当经过加密后的密码就不一样了,如 “gl001” 这个密码经过加密后就成这样:“JCowO10WSQ7ob6xTLHChtA==”,这便是经过加密的密码;

        经过加密后的密码或者别的就安全很多,不会那么随意就被破解或者泄露,同时安全性也提高很多!!

二:思路

        加密的方式:加密方式就分两种:

        一:非对称加密    二:对称加密

        而密钥也分:公钥和私钥

       公钥:是向外界公开的;    私钥:则是自己保留,不对外公开

        两种的关系:都是通过某种算法得到的密钥对

三:内容

1、类

一:     private static string Key
        {
            get { return @")O[NB]6,YF}+efcaj{+oESb9d8>Z'e9M"; }
        }

二:     private static string IV
        {
            get { return @"L+\~f4,Ir)b$=pkf"; }
        }

如上,上面的代码有两段,每段的功能都不一样,准确来说,是起到的作用不一样

第一段:获取密钥,密钥,加密和解密的时候都需要用到

第二段:获取向量

(1)加密      这里的参数类型是 btye[]

        public static Byte[] AESEncrypt(Byte[] Data, String Key, String Vector)
        {
            Byte[] bKey = new Byte[32];
            Array.Copy(Encoding.UTF8.GetBytes(Key.PadRight(bKey.Length)), bKey, bKey.Length);
            Byte[] bVector = new Byte[16];
            Array.Copy(Encoding.UTF8.GetBytes(Vector.PadRight(bVector.Length)), bVector, bVector.Length);
            Byte[] Cryptograph = null; 
            Rijndael Aes = Rijndael.Create();
            try
            {
                
                using (MemoryStream Memory = new MemoryStream())
                {
                    
                    using (CryptoStream Encryptor = new CryptoStream(Memory,
                     Aes.CreateEncryptor(bKey, bVector),
                     CryptoStreamMode.Write))
                    {
                        
                        Encryptor.Write(Data, 0, Data.Length);
                        Encryptor.FlushFinalBlock();

                        Cryptograph = Memory.ToArray();
                    }
                }
            }
            catch
            {
                Cryptograph = null;
            }
            return Cryptograph;
        }

如上便是加密的流程;

Byte[] Cryptograph = null;        加密后的密文

using (MemoryStream Memory = new MemoryStream() )   { …… }     开辟/创建一块内存流

using (CryptoStream Encryptor = new CryptoStream(Memory,Aes.CreateEncryptor(bKey, bVector), CryptoStreamMode.Write))  {……}          把内存流对象包括成加密对象

 Encryptor.Write(Data, 0, Data.Length);             明文数据写入加密流

(2)解密   这里的参数类型是 btye[]

有加密,便有解密,如下

        public static Byte[] AESDecrypt(Byte[] Data, String Key, String Vector)
        {
            Byte[] bKey = new Byte[32];
            Array.Copy(Encoding.UTF8.GetBytes(Key.PadRight(bKey.Length)), bKey, bKey.Length);
            Byte[] bVector = new Byte[16];
            Array.Copy(Encoding.UTF8.GetBytes(Vector.PadRight(bVector.Length)), bVector, bVector.Length);

            Byte[] original = null; 

            Rijndael Aes = Rijndael.Create();
            try
            {
               
                using (MemoryStream Memory = new MemoryStream(Data))
                {
                    
                    using (CryptoStream Decryptor = new CryptoStream(Memory,
                    Aes.CreateDecryptor(bKey, bVector),
                    CryptoStreamMode.Read))
                    {
                        
                        using (MemoryStream originalMemory = new MemoryStream())
                        {
                            Byte[] Buffer = new Byte[1024];
                            Int32 readBytes = 0;
                            while ((readBytes = Decryptor.Read(Buffer, 0, Buffer.Length)) > 0)
                            {
                                originalMemory.Write(Buffer, 0, readBytes);
                            }

                            original = originalMemory.ToArray();
                        }
                    }
                }
            }
            catch
            {
                original = null;
            }
            return original;
        }

解释或者说明其中部分代码的作用:

Byte[] original = null;      解密或的铭文

  using (MemoryStream Memory = new MemoryStream(Data)) { …… }    开辟/创建一块内存流,存储密文

using (MemoryStream originalMemory = new MemoryStream())   {……}    明文存储区

注意!!:

using (CryptoStream Decryptor = new CryptoStream(Memory,
                    Aes.CreateDecryptor(bKey, bVector),
                    CryptoStreamMode.Read))
                    {……}

这句代码跟上面加密的的那句的作用一样,都是把内存流对象包装成加密流对象,但是它们的单词不一样,所返回的结果也不一样;

如:CreateDecryptor () :对称解密器对象

 

 CreateEncryptor () : 对称加密器对象

 还有 Read 和 Write

 这些都是可以看到的,都是可以从从元数据里看的到的;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值