zoukankan      html  css  js  c++  java
  • 数据加密 第二篇:加密算法和加密机制

    加密是指通过使用密钥或密码对数据进行模糊处理的过程,加密解密最简单的过程如下图所示:

    对称加密是加密和解密使用同一个密钥的加密算法,在图中就是加密密钥和解密密钥是相同的。对称加密通常来说会比较羸弱,因为使用数据时不仅仅需要传输数据本身,还是要通过某种方式传输密钥,这很有可能使得密钥在传输的过程中被窃取。

    非对称加密是加密和解密使用不同密钥的加密算法,在图中就是加密密钥和解密密钥是不同的。用于加密的密钥称之为公钥,用于解密的密钥称之为私钥。因此安全性相比对称加密来说会大大提高。当然有一长必有一短,非对称加密的方式通常算法会相比对称密钥来说复杂许多,因此会带来性能上的损失。

    因此,一种折中的办法是使用对称密钥来加密数据,而使用非对称密钥来加密对称密钥。这样既可以利用对称密钥的高性能,还可以利用非对称密钥的可靠性。

    没有一个加密算法能够适用所有的情况,在选择加密机制时,可以借鉴一些成功的经验:

    • 强的加密通常意味着消耗更多的CPU资源;
    • 长的密钥比短密钥的加密效果更好;
    • 长密码比短密码的加密效果更好
    • 非对称加密比对称加密更慢,但是加密效果更好;
    • 如果要加密大量的数据,推荐使用对称密钥来加密数据,然后使用非对称密钥加密该非对称密钥。
    • 密文不能被压缩,但是,压缩后的数据可以被加密,推荐在压缩数据后再对数据进行加密。

    加密算法

    加密算法用于把数据转换成密文,从SQL Server 2016 (13.x)开始,除了AES_128, AES_192 和 AES_256 之外,其他加密算法都已经过时了。

    关于DES算法的说明:

    • 使用ALGORITHM = TRIPLE_DES_3KEY 创建的对称密钥,是指192bit的TRIPLE DES
    • 使用ALGORITHM = TRIPLE_DES 创建的对称密钥,是指128bit的TRIPLE DES

    加密机制

    SQL Server提供的加密方式主要是值级加密(Cell Level)和文件级别加密(TDE)。SQL Server提供的加密机制主要有:

    • 加密函数:使用短语作为密码对数据进行加密
    • 非对称密钥(Asymmetric keys)和对称密钥(Symmetric keys)
    • 凭证(Certificates)
    • 透明数据加密(Transparent Data Encryption,简称TDE),对整个数据库文件进行加密

    使用短语加密数据

    对于单个值,可以使用TSQL函数EncryptByPassPhrase()进行加密,使用DecryptByPassPhrase()进行解密。传递一个短语作为密码,使用128bit键长的TRIPLE DES 算法进行加密。

    EncryptByPassPhrase ( 'passphrase', 'cleartext' [ , add_authenticator , authenticator ] )
    DecryptByPassPhrase ( 'passphrase', 'ciphertext' [ , add_authenticator ,authenticator  ] ) 

    参数注释:

    • passphrase:字符串,用于生成对称键
    • cleartext:需要加密的字符串,数据类型可以是:nvarchar, char, varchar, binary, varbinary, 或 nchar,不能超过8000Bytes。
    • ciphertext:密文,是加密之后的数据,数据类型是varbinary。
    • add_authenticator:布尔值,是否把authenticatory和cleartext以及加密。如果是1,authenticator参数必须有值。默认值是0,可以省略参数add_authenticator和authenticator。
    • authenticator:sysname类型,用于指示身份验证者

    返回值:这两个函数的返回值都是varbinary,最大长度是8000Bytes。

    举个例子,使用这两个函数对数据进行加密和解密:

    declare @cipher varbinary(8000)
    select @cipher=Encryptbypassphrase(N'悦光阴','A good man')
    select @cipher as EncryptedText,cast(Decryptbypassphrase(N'悦光阴',@cipher) as varchar(128)) as DecryptedText

    参考文档:

    细说SQL Server中的加密

  • 相关阅读:
    binder机制理解
    Android 资源目录
    Andriod 构建项目流程
    dpi、ppi 、dp、sp、px、 pt相关概念
    短语、直接短语和句柄
    MySql优化
    java虚拟机内存管理
    redis
    linux——nginx的安装及配置
    linux——高级文本处理命令之wc、cut、sort
  • 原文地址:https://www.cnblogs.com/ljhdo/p/12907215.html
Copyright © 2011-2022 走看看