找回密码
 立即注册
首页 业界区 安全 MS SQL Server 数据加密与解密实例

MS SQL Server 数据加密与解密实例

琶轮 2025-11-25 13:05:01
在13年,有分享了MS SQL Server的加密与解密,
https://www.cnblogs.com/insus/p/3434735.html

看了,只知在数据库中创建了主密钥、证书、非对称密钥和多个对称密钥。但没有实例,还清楚怎样使用它们。

分几个示例来展示,

#1,使用对称密钥(PasswordSymmetric)加密和解密
1.jpeg

2.gif
3.gif
  1. -- 加密数据        
  2. OPEN SYMMETRIC KEY PasswordSymmetric
  3.     DECRYPTION BY PASSWORD = 'Pass#Tutorial#word';
  4. DECLARE @PlainText NVARCHAR(100) = N'敏感数据'; --需要加密
  5. DECLARE @CipherText VARBINARY(256);
  6. -- 加密
  7. SELECT @CipherText = ENCRYPTBYKEY(KEY_GUID('PasswordSymmetric'), @PlainText);
  8. -- 查看加密结果
  9. SELECT @PlainText AS 明文, @CipherText AS 密文;
  10. -- 解密
  11. SELECT @PlainText AS 原始明文,@CipherText AS 加密数据,CONVERT(NVARCHAR(100),DECRYPTBYKEY(@CipherText)) AS 解密结果;
  12. CLOSE SYMMETRIC KEY PasswordSymmetric;
复制代码
View Code 
#2,使用由证书加密的对称密钥(SymmetricByCert)加密和解密
4.jpeg

 
5.gif
6.gif
  1. -- 使用证书加密的对称密钥
  2. OPEN SYMMETRIC KEY SymmetricByCert
  3.     DECRYPTION BY CERTIFICATE PasswordCert;
  4. DECLARE @CreditCardNumber NVARCHAR(20) = '6222-5335-0012-3406';
  5. DECLARE @EncryptedCard VARBINARY(256);
  6. -- 加密信用卡号
  7. SELECT @EncryptedCard = ENCRYPTBYKEY(KEY_GUID('SymmetricByCert'), @CreditCardNumber);
  8. -- 解密信用卡号
  9. SELECT
  10.     @CreditCardNumber AS 原始卡号,
  11.     @EncryptedCard AS 加密卡号,
  12.     CONVERT(NVARCHAR(20), DECRYPTBYKEY(@EncryptedCard)) AS 解密卡号;
  13. CLOSE SYMMETRIC KEY SymmetricByCert;
复制代码
View Code 
#3,使用由对称密钥加密的对称密钥(SymmetricBySy)加密和解密
7.jpeg

8.gif
9.gif
  1. -- 先打开主对称密钥
  2. OPEN SYMMETRIC KEY PasswordSymmetric
  3.     DECRYPTION BY PASSWORD = 'Pass#Tutorial#word';
  4. -- 再打开被对称密钥加密的密钥
  5. OPEN SYMMETRIC KEY SymmetricBySy
  6.     DECRYPTION BY SYMMETRIC KEY PasswordSymmetric;
  7. DECLARE @Phone NVARCHAR(20) = '18900000000'
  8. DECLARE @Email NVARCHAR(100) = 'user@example.com';
  9. DECLARE @EncryptedPhone VARBINARY(256);
  10. DECLARE @EncryptedEmail VARBINARY(256);
  11. -- 加密移号码
  12. SELECT @EncryptedPhone = ENCRYPTBYKEY(KEY_GUID('SymmetricBySy'), @Phone);
  13. -- 加密邮箱
  14. SELECT @EncryptedEmail = ENCRYPTBYKEY(KEY_GUID('SymmetricBySy'), @Email);
  15. -- 解密移动号码
  16. SELECT
  17.     @Phone AS 原始移动号码,
  18.     @EncryptedPhone AS 加密移动号码,
  19.     CONVERT(NVARCHAR(100), DECRYPTBYKEY(@EncryptedPhone)) AS 解密移动号码;
  20. -- 解密邮箱
  21. SELECT
  22.     @Email AS 原始邮箱,
  23.     @EncryptedEmail AS 加密邮箱,
  24.     CONVERT(NVARCHAR(100), DECRYPTBYKEY(@EncryptedEmail)) AS 解密邮箱;
  25. CLOSE SYMMETRIC KEY SymmetricBySy;
  26. CLOSE SYMMETRIC KEY PasswordSymmetric;
复制代码
View Code 
#4,使用由非对称密钥加密的对称密钥(SymmetricByAsy)加密和解密
10.jpeg

 
11.gif
12.gif
  1. -- 打开被非对称密钥加密的对称密钥
  2. OPEN SYMMETRIC KEY SymmetricByAsy
  3.     DECRYPTION BY ASYMMETRIC KEY PasswordAsymmetric WITH PASSWORD = 'Pass#Tutorial#word';
  4. DECLARE @MedicalInsuranceCardNumber NVARCHAR(15) = '888-545-6004';
  5. DECLARE @EncryptedMedicalInsuranceCardNumber VARBINARY(256);
  6. -- 加密医保卡号
  7. SELECT @EncryptedMedicalInsuranceCardNumber = ENCRYPTBYKEY(KEY_GUID('SymmetricByAsy'), @MedicalInsuranceCardNumber);
  8. -- 解密
  9. SELECT
  10.     @MedicalInsuranceCardNumber AS 原始医保卡号,
  11.     @EncryptedMedicalInsuranceCardNumber AS 加密医保卡号,
  12.     CONVERT(NVARCHAR(15), DECRYPTBYKEY(@EncryptedMedicalInsuranceCardNumber)) AS 解密医保卡号;
  13. CLOSE SYMMETRIC KEY SymmetricByAsy;
复制代码
View Code 
更详细,可参考MSDN......
 

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册