密钥分为对称密钥和非对称密钥,密钥本质上是加密数据的算法:

  • 对称密钥(Symmetric Keys)是指加密和解密的过程使用相同的算法,是加密中最弱的算法,但是性能最好。对于对称密钥,可以使用密码或者另一个密钥甚至一个证书来加密。
  • 非对称密钥(Asymmetric Keys)使用一对密钥(算法),一个密钥用于加密,另一个密钥用于解密,加密的密钥称为私钥(private key),解密的密钥称为公钥(public key)。

不管对称密钥,还是非对称密钥,都不能备份。在加密体系中,能够备份的只有SMK、DMK和证书。

对称密钥(Symmetric Keys)

对称密钥是指数据的加密(encryption)与解密(decryption)用的是同样的密钥(secret key)。不过即使是最弱的算法,也能增加数据防御的能力,毕竟不是每个攻击者都是顶级的。对于对称密钥,可以使用密码,或者另一个密钥,甚至一个证书来加密。

一,创建对称密钥

创建对称密钥时,需要制定对数据进行加密的算法,对称密钥必须用至少一个方式来加密:certificate, password, symmetric key, asymmetric key, 或 PROVIDER,密钥可以同时有多种加密方式。

CREATE SYMMETRIC KEY key_name
WITH ALGORITHM = { AES_128 | AES_192 | AES_256 }, ENCRYPTION BY <encrypting_mechanism> [ , ... n ] <encrypting_mechanism> ::=  CERTIFICATE certificate_name   | PASSWORD = 'password'   | SYMMETRIC KEY symmetric_key_name   | ASYMMETRIC KEY asym_key_name  

举个例子,创建一个对称密钥,使用AES_256对数据进行加密,并使用证书对密钥进行加密:

CREATE SYMMETRIC KEY JanainaKey09
WITH ALGORITHM = AES_256
ENCRYPTION BY CERTIFICATE Shipping04;
GO  

二,使用对称密钥来加密和解密数据的函数

在对称密钥创建完成之后,要使用对称密钥对数据进行加密,首先要打开对称密钥,对称密钥的GUID可以通过函数key_GUID('name')来获得:

OPEN SYMMETRIC KEY Key_name DECRYPTION BY <decryption_mechanism>  <decryption_mechanism> ::=  CERTIFICATE certificate_name [ WITH PASSWORD = 'password' ]  | ASYMMETRIC KEY asym_key_name [ WITH PASSWORD = 'password' ]  | SYMMETRIC KEY decrypting_Key_name  | PASSWORD = 'decryption_password'  

当对称密钥打开之后,使用EncryptByKey ()来对数据进行加密,返回值是varbinar,最大长度是8000Bytes:

EncryptByKey ( key_GUID , { 'cleartext' | @cleartext }  [, { add_authenticator | @add_authenticator }  , { authenticator | @authenticator } ] ) 

使用DecryptByKey ()来对数据进行解密:

DecryptByKey ( { 'ciphertext' | @ciphertext }   [ , add_authenticator, { authenticator | @authenticator } ] ) 

在不使用对称密钥时,把密钥关闭:

CLOSE SYMMETRIC KEY key_name

三,使用对称密钥来加密和解密数据的实例

创建证书来对对称密钥进行加密。

1,使用对称密钥加密数据

Step1,创建证书,并使用数据库主密钥来加密证书

CREATE CERTIFICATE CreditCardCert
WITH SUBJECT = 'Credit Card Numbers';

Step2:创建对称密钥

创建一个名称为CreditCardKey的对称密钥,使用AES_128加密算法,并使用证书对密钥进行加密

CREATE SYMMETRIC KEY CreditCardKey
WITH ALGORITHM = AES_128
ENCRYPTION BY CERTIFICATE CreditCardCert; 

从 SQL Server 2016开始,除 AES_128、AES_192 和 AES_256 以外的所有算法都已过时。

Step 3:解密对称密钥并使其可供使用

使用密钥前需要解密对称密钥,然后打开密钥,否则密钥不可用

OPEN SYMMETRIC KEY CreditCardKey DECRYPTION BY CERTIFICATE CreditCardCert; 

Step4:使用密钥对数据进行加密

调用ENCRYPTBYKEY()函数使用对称密钥对数据进行加密

UPDATE Sales.CreditCard
SET CardNumberEncrypted = ENCRYPTBYKEY(Key_GUID('CreditCardKey'), CardNumber); 

函数 KEY_GUID('key_name')返回对称密钥的GUID。

Step 5:关闭密钥

密钥的打开状态对当前Session起作用,在使用玩密钥之后,应该及时把密钥关闭。

CLOSE SYMMETRIC KEY CreditCardKey ;

2,解密对称密钥

首先打开对称密钥,然后使用对称密钥解密数据,最后关闭密钥

OPEN SYMMETRIC KEY CreditCardKey DECRYPTION BY CERTIFICATE CreditCardCert; SELECT CONVERT(NVARCHAR(30), DECRYPTBYKEY(CardNumberEncrypted)) AS CreditCardNumber
FROM Sales.CreditCard ; CLOSE SYMMETRIC KEY CreditCardKey ; 

四,对称密钥的使用

在使用对称密钥时,信息的发送方和接收方用一个密钥去加密和解密数据,它的最大优势是加/解密速度快,适合于对大数据量进行加密,对称加密的一大缺点是密钥的管理与分配,换句话说,如何把密钥发送到需要解密你的消息的人的手里是一个问题。在发送密钥的过程中,密钥有很大的风险会被黑客们拦截。现实中通常的做法是将对称加密的密钥进行非对称加密,然后传送给需要它的人。

对称加密通常使用的是相对较小的密钥,一般小于256 bit。因为密钥越大,加密越强,但加密与解密的过程越慢。如果你只用1 bit来做这个密钥,那黑客们可以先试着用0来解密,不行的话就再用1解;但如果你的密钥有1 MB大,黑客们可能永远也无法破解,但加密和解密的过程要花费很长的时间。密钥的大小既要照顾到安全性,也要照顾到效率,是一个trade-off。

对称加密的一大缺点是密钥的管理与分配,换句话说,如何把密钥发送到需要解密你的消息的人的手里是一个问题。在发送密钥的过程中,密钥有很大的风险会被黑客们拦截。现实中通常的做法是将对称加密的密钥进行非对称加密,然后传送给需要它的人。

参考文档:

CREATE SYMMETRIC KEY (Transact-SQL)

数据加密 第四篇:对称密钥相关推荐

  1. 【计算机网络】网络安全 : 总结 ( 网络攻击类型 | 网络安全指标 | 数据加密模型 | 对称密钥密码体质 | 公钥密码体质 | 数字签名 | 报文鉴别 | 实体鉴别 | 各层安全 ) ★

    文章目录 一.四种网络攻击 ★ 二.网络安区指标 ★ 三.数据加密模型 ★ 四.对称密钥密码体质 ★ 五.公钥密码体质 ★ 六.数字签名 ★ 七.报文鉴别 ★ 八.实体鉴别 ★ 九.IP 安全 ( 网 ...

  2. 【计算机网络】网络安全 : 对称密钥密码体质 ( 数据加密标准 DES | DES 加密过程 | DES 保密性 | 三重 DES 加密 )

    文章目录 一. 对称密钥密码体质 二. 数据加密标准 DES 三. DES 加密过程 四. DES 保密性 五. 三重 DES 加密 一. 对称密钥密码体质 对称密钥密码体质 : 又称为 常规密钥密码 ...

  3. 数据加密 第五篇:非对称密钥

    非对称密钥(Asymmetric Keys)跟对称密钥相对,它使用一对密钥(算法),一个密钥用于加密,另一个密钥用于解密,加密的密钥称为私钥(private key),解密的密钥称为公钥(public ...

  4. 对称密钥加密算法 对称轮数_选择Java加密算法第2部分–单密钥对称加密

    对称密钥加密算法 对称轮数 抽象 这是涵盖Java加密算法的三部分博客系列的第2部分. 该系列涵盖如何实现以下功能: 使用SHA–512散列 AES–256 RSA–4096 这第二篇文章详细介绍了如 ...

  5. 第四篇:网络安全,SSL/TLS加密技术

    文章目录 一.前言 二.SSL/TLS 2.1 SSL/TLS是什么 2.2 SSL/TLS加密基本原理 2.3 SSL/TLS建立握手过程 三.CA & SSL Server & S ...

  6. Chapter7 对称密钥原语的实用构造

    Chapter7 对称密钥原语的实用构造 文章目录 Chapter7 对称密钥原语的实用构造 7.1 流密码 7.1.1 线性反馈移位寄存器 7.1.2 添加非线性 7.1.3 Trivium 7.1 ...

  7. 【计算机网络】网络安全 : 公钥密码体质 ( 公钥 - 加密密钥 | 私钥 - 解密密钥 | 与对称密钥体质对比 | 特点 | 数字签名引入 )

    文章目录 一.公钥密码体质 二.公钥密码体质 中的 加密密钥 与 解密密钥 三.公钥密码体质 与 对称密钥体质对比 四.公钥密码体质算法特点 五.公钥密码体质 与 数字签名 一.公钥密码体质 公钥密码 ...

  8. 【论文相关】盘点AAAI2020中的四篇推荐系统好文

    AAAI中推荐系统的文章并不多,目之所及处仅有四篇.内容上覆盖了评论推荐.多目标推荐以及图神经网络等话题. 本文基于AAAI中的这四篇推荐系统论文,展开瞅一瞅它们都讲了些什么. 第一篇文章:可解释评论 ...

  9. 密码学系列之:twofish对称密钥分组算法

    简介 之前的文章我们讲到blowfish算法因为每次加密的块比较小只有64bits,所以不建议使用blowfish加密超过4G的文件.同时因为加密块小还会导致生日攻击等.所以才有了blowfish的继 ...

  10. AAAI2020中的四篇推荐系统好文(附论文下载链接)

    AAAI中推荐系统的文章并不多,目之所及处仅有四篇.内容上覆盖了评论推荐.多目标推荐以及图神经网络等话题. 本文基于AAAI中的这四篇推荐系统论文,展开瞅一瞅它们都讲了些什么. 第一篇文章:可解释评论 ...

最新文章

  1. Mangos自己制作装备
  2. CentOs7安装apache以及遇到的问题
  3. 初识Ildasm.exe——IL反编译的实用工具(转自Youngman)
  4. codeforces1467 E. Distinctive Roots in a Tree(树上差分)
  5. 使用CodeSmith要注意的几点
  6. opensource项目_生日快乐,Opensource.com:9年
  7. PyCharm 专题
  8. scala的函数化编程
  9. 连接远程hbase长时间等待问题
  10. linux 指定库名 登录mysql_linux终端mysql用户操作只看这篇够了
  11. 英语专业转行计算机可以吗,英语专业转行学IT,从“小白”到月薪10k+,她做到了!...
  12. Chrome浏览器安装vue插件(附插件下载地址)
  13. jar包 运行内存分配情况
  14. 从零开始用人工智能预测股票(二、数据加工)
  15. usart hmi(串口屏)介绍
  16. 移位寄存器SHIFT RAM IP之模拟图像卷积
  17. 达梦数据库(DM)——命令方式开启达梦数据库本地归档的具体方法
  18. Troubleshooting: High Version Count Issues (文档 ID 296377.1)
  19. Java中23种设计模式(随时不定时更新)
  20. Android String字符串截取方法总结

热门文章

  1. 实用供暖通风空调设计手册 第三版_实用供热空调设计手册(第三版)“流体输配与水力平衡”技术专题讨论会...
  2. Modbus转Profinet网关连接英威腾变频器方法
  3. 文件系统性能测试工具 FIO工具
  4. FPGA MCU FSMC通信接口——NAND Flash模式
  5. SRCNN 图像超分辨率重建(tf2)
  6. win10计算机策略组在哪,win10家庭版的组策略在哪里打开
  7. 维修管理系统微信小程序部署流程
  8. C语言知识点笔记完全整理
  9. 三维扫描+逆向建模+3D打印复刻工艺品
  10. tomcat解决get请求中文乱码问题(两种解决方案)