威尼斯人线上娱乐

数据加密功用解析,Server数据加密功用解析

5 4月 , 2019  

====对称加密(向量)=====

便民md5加密:

SQL Server 数据加密功用解析

 

转载自: 腾云阁 

数量加密是数据库被破解、物理介质被盗、备份被窃取的最后壹道防线,数据加密,1方面消除数量被窃取安全题材,另1方面有关法规需求强制加密数据。SQL
Server
的多寡加密相较于任何数据库,作用相对圆满,加密措施较多。经常来讲,数据加密分为对称加密和非对称加密。对称加密:加密与解密使用同1密钥,密钥必要传输,安全性较弱,但品质较非对称要好。非对称加密:加密与解密使用不一样密钥(公钥和私钥),较对称密钥安全性较好,不过算法较复杂,带来质量上的损失。由此,折中的方法是选择对称密钥加密数量,使用非对称密钥加密对称密钥。那样既保险高品质,又升高密钥的可相信性。

1样,SQL Server 就应用了折中的方法,所以SQL
Server 加密成效包涵二个部分:数据加密和密钥管理

威尼斯人线上娱乐, 

 

壹.数据加密

商业事务数据加密,我们只可以说下加密算法,SQL Server支持四种加密算法:

威尼斯人线上娱乐 1

 

2.密钥管理

壹.SQL Server加密层次结构

威尼斯人线上娱乐 2
由图能够看到,加密是分层级的。每1个数据库实例都装有多少个劳动主密钥(ServiceMaster
Key),那几个密钥是实例的根密钥,在实例安装的时候自动生成,其自个儿由Windows提供的数据爱慕API实行维护(Data
Pertection
API),服务主密钥除了为其子节点提供加密服务之外,还用于加密1些实例级其他音信,比如实例的登录名密码依旧链接服务器的新闻。

在劳务主密钥之下的是数据库主密钥(Database Master
Key),这一个密钥由劳动主密钥实行加密。那是一个数据库级其余密钥,能够用来为制造数据库级其余证件或非对称密钥提供加密,每二个数据库只可以有一个数据库主密钥。

数据加密功用解析,Server数据加密功用解析。EKM模块,这些相比尤其,全称可扩大密钥管理模块,该功效增强sqlserver密钥管理的力量,允许将密钥存储到数据库之外,包含1些硬件,如智能卡、USB设备或硬件安全模块(HSM);并且同意选取第2方产品来管理密钥和展开加密;其余,有原则的能够运用更加高质量的HSM模块来加解密,减弱加解密上品质的损失。

 

二.SQL Server加密主意

目的定义加密

未确认保证触发器、存款和储蓄进程、视图等概念音讯,大家得以在概念sqlserver对象的时候添加WITH
ENC奥德赛YPTION字段来加密对象。

 

列数据加密

经过函数加密表中的某一列数据。可以透过密码、对称密钥、非对称密钥、证书等4中艺术加密。其中,还包蕴带有验证器的加密函数,验证器用来缓解密文替换难题,验证器1般接纳不更改独一无2的id,那样固然密文替换,验证器不对,一样没戏。

 

连天加密

经过证书的不二秘诀对ssl连接加密,1般用于镜像,客户端和SQL
Server之间的连日便是通过那种情势,防止黑客窃取客户端和数据库之间的出殡的数据。

 

TDE透明数据加密(二零零六)

晶莹剔透数据加密,顾名思义,是在用户不感知的景色下完了加解密操作。
它的加密是在页级别实行,是在写入磁盘前加密,读入内部存款和储蓄器时解密,针对数据和日志文件,做到实时I/O加密,并且备份文件也会联合加密。
密钥存在数据库指点记录中,收到证件可能非对称密钥的保卫安全,也可以与EKM模块1同使用。官方说法,额外占用三%-5%的cpu能源。
TDE也有局地欠缺:
压缩率小,由于它是先加密再压缩的,所以无法肯定滑坡备份。
备份同样是加密的,全部恢复生机的时候要小心,注意备份证书和密钥,才能在另个实例中还原数据库
质量有肯定损耗

 

备份加密(201四)

扶助备份的经过中展开加密,并且辅助先削减在加密,保持高压缩比,打破了利用透明数据加密后大约一向不压缩率的窘境。
所以,使用原生备份加密无论在将数据备份到外省数据主导,依然将数据备份到云端,都能够以相当低的资金对数据提供额外的定西保持。

 

全程加密AlwaysEncrypted(201陆)

全程加密,数据永远是加密状态,你能够在加密数码上推行操作,无需先对它们解密,也正是说加密的机智音信不会有机遇变成明文。
全程加密针对列做处理,在创设列主密钥,列加密密钥后,可以在创造表的时候设置列加密。
加密格局分为三种:明确型加密与随机型加密。
明确型加密能够保障对有个别值加密后的结果是一味相同的,那就允许使用者对该多少列实行等值相比、连接及分组操作。分明型加密的败笔在于有望估量出原来的小说,而随机型加密能够确认保证某些给定值在随机两回加密后的结果三番五次分歧的,从而杜绝了猜出原值的可能。官方提出需求摸索和分组的列使用鲜明性加密,而注释和其它敏感不会进展搜寻分组的新闻使用随机性加密。

 

        //SymmetricAlgorithm 所有对称算法的实现都必须从中继承的抽象基类
        private SymmetricAlgorithm mobjCryptoService;
        private string key;
        public Encrypt()
        {
            mobjCryptoService = new RijndaelManaged();
            key = "Guz(%&hj7x89H$yuBI0456FtmaT5&fvHUFCy76*h%(HilJ$lhj!y6&(*jkP87jH7";//自定义的密串
        }
        /// <summary>
        /// 获得密钥
        /// </summary>
        /// <returns>密钥</returns>
        private byte[] GetLegalKey()
        {
            string sTemp = key;
            mobjCryptoService.GenerateKey();// 当在派生类中重写时,生成用于该算法的随机密钥
            byte[] bytTemp = mobjCryptoService.Key;
            int KeyLength = bytTemp.Length;
            if (sTemp.Length > KeyLength)
                sTemp = sTemp.Substring(0, KeyLength);
            else if (sTemp.Length < KeyLength)
                sTemp = sTemp.PadRight(KeyLength, ' ');
            return ASCIIEncoding.ASCII.GetBytes(sTemp);
        }
        /// <summary>
        /// 获得初始向量IV
        /// </summary>
        /// <returns>初试向量IV</returns>
        private byte[] GetLegalIV()
        {
            string sTemp = "E4ghj*Ghg7!rNIfb&95GUY86GfghUb#er57HBh(u%g6HJ($jhWk7&!hg4ui%$hjk";
            mobjCryptoService.GenerateIV();
            byte[] bytTemp = mobjCryptoService.IV;// 获取或设置对称算法的初始化向量
            int IVLength = bytTemp.Length;//获得一个 32 位整数,表示 System.Array 的所有维数中元素的总数
            if (sTemp.Length > IVLength)
                sTemp = sTemp.Substring(0, IVLength);
            else if (sTemp.Length < IVLength)
                sTemp = sTemp.PadRight(IVLength, ' ');
            return ASCIIEncoding.ASCII.GetBytes(sTemp);
        }
        /// <summary>
        /// 加密方法(请先实例化Encrypt类)
        /// </summary>
        /// <param name="Source">待加密的串</param>
        /// <returns>经过加密的串</returns>
        public string EncrypStrByIV(string Source)
        {
            byte[] bytIn = UTF8Encoding.UTF8.GetBytes(Source);
            MemoryStream ms = new MemoryStream();
            mobjCryptoService.Key = GetLegalKey();
            mobjCryptoService.IV = GetLegalIV();
            ICryptoTransform encrypto = mobjCryptoService.CreateEncryptor();
            CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Write);
            cs.Write(bytIn, 0, bytIn.Length);
            cs.FlushFinalBlock();
            ms.Close();
            byte[] bytOut = ms.ToArray();
            return Convert.ToBase64String(bytOut);
        }
        /// <summary>
        /// 解密方法(请先实例化Encrypt类)
        /// </summary>
        /// <param name="Source">待解密的串</param>
        /// <returns>经过解密的串</returns>
        public string DecrypStrByIV(string Source)
        {
            byte[] bytIn = Convert.FromBase64String(Source);
            MemoryStream ms = new MemoryStream(bytIn, 0, bytIn.Length);
            mobjCryptoService.Key = GetLegalKey();
            mobjCryptoService.IV = GetLegalIV();
            ICryptoTransform encrypto = mobjCryptoService.CreateDecryptor();
            CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Read);
            StreamReader sr = new StreamReader(cs);
            return sr.ReadToEnd();
        }

威尼斯人线上娱乐 3

数据加密是数据库被破解、物理介质被盗、备份被窃取的最终1道防线,数据加密,壹方面缓解数量被窃取安全难点,另一方面有关法律要求强制加密数据。SQL
Server
的数据加密相较于任何数据库,功用相对健全,加密办法较多。经常来讲,数据加密分为对称加密和非对称加密。对称加密:加密与解密使用同1密钥,密钥需求传输,安全性较弱,但品质较非对称要好。非对称加密:加密与解密使用分化密钥(公钥和私钥),较对称密钥安全性较好,可是算法较复杂,带来质量上的损失。由此,折中的方法是使用对称密钥加密数量,使用非对称密钥加密对称密钥。那样既保障高品质,又加强密钥的可相信性。

 ========DES加密========

百度md5加密:

一如既往,SQL Server 就利用了折中的方法,所以SQL Server
加密功用包蕴一个部分:数据加密和密钥管理

        /// <summary>
        /// DES加密
        /// </summary>
        /// <param name="Text">待加密的字符串</param>
        /// <returns>加密后的字符串</returns>
        public static string DESEncrypt(string Text)
        {
            return DESEncrypt(Text, "ijnskijnse");
        }

        /// <summary> 
        /// DES加密数据 
        /// </summary> 
        /// <param name="Text">待加密的字符串</param> 
        /// <param name="sKey">加密密钥</param> 
        /// <returns>加密后的字符串</returns> 
        public static string DESEncrypt(string Text, string sKey)
        {
            DESCryptoServiceProvider des = new DESCryptoServiceProvider();
            byte[] inputByteArray;
            inputByteArray = Encoding.Default.GetBytes(Text);
            des.Key = ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sKey, "md5").Substring(0, 8));
            des.IV = ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sKey, "md5").Substring(0, 8));
            System.IO.MemoryStream ms = new System.IO.MemoryStream();
            CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
            cs.Write(inputByteArray, 0, inputByteArray.Length);
            cs.FlushFinalBlock();
            StringBuilder ret = new StringBuilder();
            foreach (byte b in ms.ToArray())
            {
                ret.AppendFormat("{0:X2}", b);
            }
            return ret.ToString();
        }




        /// <summary>
        /// DES解密
        /// </summary>
        /// <param name="Text">待解密的字符串</param>
        /// <returns>解密后的明文</returns>
        public static string DESDecrypt(string Text)
        {
            return DESDecrypt(Text, "ijnskijnse");
        }

        /// <summary> 
        /// DES解密数据 
        /// </summary> 
        /// <param name="Text">待解密的字符串</param> 
        /// <param name="sKey">解密密钥</param> 
        /// <returns>解密后的明文</returns> 
        public static string DESDecrypt(string Text, string sKey)
        {
            DESCryptoServiceProvider des = new DESCryptoServiceProvider();
            int len;
            len = Text.Length / 2;
            byte[] inputByteArray = new byte[len];
            int x, i;
            for (x = 0; x < len; x++)
            {
                i = Convert.ToInt32(Text.Substring(x * 2, 2), 16);
                inputByteArray[x] = (byte)i;
            }
            des.Key = ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sKey, "md5").Substring(0, 8));
            des.IV = ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sKey, "md5").Substring(0, 8));
            System.IO.MemoryStream ms = new System.IO.MemoryStream();
            CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);
            cs.Write(inputByteArray, 0, inputByteArray.Length);
            cs.FlushFinalBlock();
            return Encoding.Default.GetString(ms.ToArray());
        }

威尼斯人线上娱乐 4

一.数量加密

 ====倒序加1加密解密====

 

讨论数据加密,我们不得不说下加密算法,SQL Server援救二种加密算法:

 /// <summary>
        /// 倒序加1加密
        /// </summary>
        /// <param name="rs"></param>
        /// <returns></returns>
        public static string EncryptOrderStr(string rs) //倒序加1加密 
        {
            byte[] by = new byte[rs.Length];
            for (int i = 0; i <= rs.Length - 1; i++)
            {
                by[i] = (byte)((byte)rs[i] + 1);
            }
            rs = "";
            for (int i = by.Length - 1; i >= 0; i--)
            {
                rs += ((char)by[i]).ToString();
            }
            return rs;
        }
        /// <summary>
        /// 顺序减1解码 
        /// </summary>
        /// <param name="rs"></param>
        /// <returns></returns>
        public static string DecryptOrderStr(string rs) //顺序减1解码 
        {
            byte[] by = new byte[rs.Length];
            for (int i = 0; i <= rs.Length - 1; i++)
            {
                by[i] = (byte)((byte)rs[i] - 1);
            }
            rs = "";
            for (int i = by.Length - 1; i >= 0; i--)
            {
                rs += ((char)by[i]).ToString();
            }
            return rs;
        }

MySQL

威尼斯人线上娱乐 5

======Base64编解码=====

加密码语言法

二.密钥管理:

        /// <summary>
        /// Base64编码
        /// </summary>
        /// <param name="code_type">编码类型</param>
        /// <param name="code">待编码的字符串</param>
        /// <returns></returns>
        public static string Base64Encode(string code_type, string code)
        {
            string encode = "";
            byte[] bytes = Encoding.GetEncoding(code_type).GetBytes(code);
            try
            {
                encode = Convert.ToBase64String(bytes);
            }
            catch
            {
                encode = code;
            }
            return encode;
        }
        /// <summary>
        /// Base64解码
        /// </summary>
        /// <param name="code_type">编码类型</param>
        /// <param name="code">带解码的字符串</param>
        /// <returns></returns>
        public static string Base64Decode(string code_type, string code)
        {
            string decode = "";
            byte[] bytes = Convert.FromBase64String(code);
            try
            {
                decode = Encoding.GetEncoding(code_type).GetString(bytes);
            }
            catch
            {
                decode = code;
            }
            return decode;
        }

MD伍(加密字符串)

壹.SQL Server加密层次结构

 

 

威尼斯人线上娱乐 6

-- 中文加密
SELECT MD5('你好')

-- 中文加密匹配查询
SELECT * FROM 表名 WHERE 字段名 = MD5('你好')

由图能够观望,加密是分层级的。每3个数据库实例都富有一个劳动主密钥(ServiceMaster
Key),这么些密钥是实例的根密钥,在实例安装的时候自动生成,其本人由Windows提供的数额爱慕API实行尊崇(Data
Pertection
API),服务主密钥除了为其子节点提供加密服务之外,还用于加密一些实例级其余新闻,比如实例的登录名密码还是链接服务器的新闻。 

加密结果:

在服务主密钥之下的是数据库主密钥(Database Master
Key),那几个密钥由劳务主密钥进行加密。那是3个数据库级其余密钥,能够用来为开创数据库级其余申明或非对称密钥提供加密,每3个数据库只好有三个数据库主密钥。

威尼斯人线上娱乐 7

EKM模块,这一个比较越发,全称可扩张密钥管理模块,该功效增强sqlserver密钥管理的力量,允许将密钥存款和储蓄到数据库之外,包涵部分硬件,如智能卡、USB设备或硬件安全模块(HSM);并且同意接纳第三方产品来保管密钥和进展加密;其它,有规则的可以应用更加高质量的HSM模块来加解密,减少加解密上质量的损失。

 

二.SQL Server加密措施

 

  • 指标定义加密

SQLSERVER

未确认保障触发器、存款和储蓄进程、视图等概念新闻,我们能够在概念sqlserver对象的时候添加WITH
ENCBMWX三YPTION字段来加密对象。

加密码语言法

  • 列数据加密
substring(sys.fn_sqlvarbasetostr(HashBytes('MD5','加密字符串')),3,32)

透过函数加密表中的某1列数据。能够由此密码、对称密钥、非对称密钥、证书等四中方法加密。个中,还包含带有验证器的加密函数,验证器用来缓解密文替换难点,验证器1般接纳不更改独一无2的id,那样固然密文替换,验证器不对,1样没戏。

 

  • 连续加密
select substring(sys.fn_sqlvarbasetostr(HashBytes('MD5','你好')),3,32)

经过证书的格局对ssl连接加密,壹般用于镜像,主从机器以前的连日正是经过这种措施。

加密结果:

  • TDE(透明数据加密)

威尼斯人线上娱乐 8

透明数据加密,顾名思义,是在用户不感知的场馆下达成加解密操作。它的加密是在页级别进行,是在写入磁盘前加密,读入内部存款和储蓄器时解密,针对数据和日志文件,做到实时I/O加密,并且备份文件也会同步加密。密钥存在数据库辅导记录中,收到证件大概非对称密钥的保险,也足以与EKM模块1同使用。官方说法,额外占用3%-五%的cpu能源。
TDE也有局地瑕疵:压缩率小,由于它是先加密再压缩的,所以不能够一目精晓收缩备份。备份同样是加密的,全数恢复的时候要小心,注意备份证书和密钥,才能在另个实例中还原数据库质量有自然损耗

想来sqlserver加密与百度加密依然有分别的.在不精通在sqlserver怎么加密时,依然不要使用sqlserver加密。至于字母、数字、英文特殊字符如故得以用sqlserver加密的。

  • 备份加密(201四)

 

帮衬备份的进程中展开加密,并且援救先削减在加密,保持高压缩比,打破了选取透明数据加密后大致未有压缩率的窘境。因而,使用原生备份加密无论在将数据备份到异乡数据主导,还是将数据备份到云端,都能够以相当低的资产对数据提供额外的七台河保持。

C# Md5加密:

  • 全程加密(201六)

加密代码:

全程加密,数据永远是加密事态,你能够在加密数据上实施操作,无需先对它们解密,也正是说加密的Smart新闻不会有时机成为明文。全程加密针对列做处理,在开立列主密钥,列加密密钥后,能够在创立表的时候设置列加密。加密情势分为三种:明显型加密与随机型加密。明确型加密能够保证对有个别值加密后的结果是始终相同的,那就同意使用者对该多少列进行等值比较、连接及分组操作。分明型加密的缺点在于有望估摸出原著,而随机型加密能够保险有个别给定值在自由三回加密后的结果总是区别的,从而杜绝了猜出原值的只怕性。官方提议要求摸索和分组的列使用显明性加密,而注释和其余敏感不会举办搜寻分组的信息应用随机性加密。最终附上TDE开通示例: 

public static string Sign(string prestr, string _input_charset)
 {
     StringBuilder sb = new StringBuilder(32);
     System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
     byte[] t = md5.ComputeHash(Encoding.GetEncoding(_input_charset).GetBytes(prestr));
     for (int i = 0; i < t.Length; i++)
     {
         sb.Append(t[i].ToString("x").PadLeft(2, '0'));
     }

     return sb.ToString();
 }

威尼斯人线上娱乐 9

加密结果:

参照链接:

威尼斯人线上娱乐 10

  • sqlserver加密:
  • 可扩充密钥管理模块EKM
  • 晶莹剔透数据加密TDE:

 

【编辑推荐】

 Java加密:

加密代码:

 

package com;

import java.security.MessageDigest;


public class Md5Test {

    public static void main(String[] args) {

        System.out.println(Md5("你好"));
    }

    public static String Md5(String str) {                            
        String re_md5 = new String();
        try {
            MessageDigest md = MessageDigest.getInstance("MD5");

            byte[] data = str.getBytes("UTF-8");

            md.update(data);
            byte b[] = md.digest();

            int i;

            StringBuffer buf = new StringBuffer("");
            for (int offset = 0; offset < b.length; offset++) {
                i = b[offset];
                if (i < 0)
                    i += 256;
                if (i < 16)
                    buf.append("0");
                buf.append(Integer.toHexString(i));
            }

            re_md5 = buf.toString();

        } catch (Exception e) {
            e.printStackTrace();
        }

       return re_md5;
    }
}

 

加密结果:

威尼斯人线上娱乐 11

 


相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图