琶轮 发表于 2025-11-25 13:05:01

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

在13年,有分享了MS SQL Server的加密与解密,
https://www.cnblogs.com/insus/p/3434735.html

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

分几个示例来展示,

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

-- 加密数据      
OPEN SYMMETRIC KEY PasswordSymmetric
    DECRYPTION BY PASSWORD = 'Pass#Tutorial#word';

DECLARE @PlainText NVARCHAR(100) = N'敏感数据'; --需要加密
DECLARE @CipherText VARBINARY(256);

-- 加密
SELECT @CipherText = ENCRYPTBYKEY(KEY_GUID('PasswordSymmetric'), @PlainText);

-- 查看加密结果
SELECT @PlainText AS 明文, @CipherText AS 密文;

-- 解密
SELECT @PlainText AS 原始明文,@CipherText AS 加密数据,CONVERT(NVARCHAR(100),DECRYPTBYKEY(@CipherText)) AS 解密结果;

CLOSE SYMMETRIC KEY PasswordSymmetric;View Code 
#2,使用由证书加密的对称密钥(SymmetricByCert)加密和解密

 
-- 使用证书加密的对称密钥
OPEN SYMMETRIC KEY SymmetricByCert
    DECRYPTION BY CERTIFICATE PasswordCert;

DECLARE @CreditCardNumber NVARCHAR(20) = '6222-5335-0012-3406';
DECLARE @EncryptedCard VARBINARY(256);

-- 加密信用卡号
SELECT @EncryptedCard = ENCRYPTBYKEY(KEY_GUID('SymmetricByCert'), @CreditCardNumber);

-- 解密信用卡号
SELECT
    @CreditCardNumber AS 原始卡号,
    @EncryptedCard AS 加密卡号,
    CONVERT(NVARCHAR(20), DECRYPTBYKEY(@EncryptedCard)) AS 解密卡号;

CLOSE SYMMETRIC KEY SymmetricByCert;View Code 
#3,使用由对称密钥加密的对称密钥(SymmetricBySy)加密和解密

-- 先打开主对称密钥
OPEN SYMMETRIC KEY PasswordSymmetric
    DECRYPTION BY PASSWORD = 'Pass#Tutorial#word';

-- 再打开被对称密钥加密的密钥
OPEN SYMMETRIC KEY SymmetricBySy
    DECRYPTION BY SYMMETRIC KEY PasswordSymmetric;

DECLARE @Phone NVARCHAR(20) = '18900000000'
DECLARE @Email NVARCHAR(100) = 'user@example.com';
DECLARE @EncryptedPhone VARBINARY(256);
DECLARE @EncryptedEmail VARBINARY(256);

-- 加密移号码
SELECT @EncryptedPhone = ENCRYPTBYKEY(KEY_GUID('SymmetricBySy'), @Phone);
-- 加密邮箱
SELECT @EncryptedEmail = ENCRYPTBYKEY(KEY_GUID('SymmetricBySy'), @Email);

-- 解密移动号码
SELECT
    @Phone AS 原始移动号码,
    @EncryptedPhone AS 加密移动号码,
    CONVERT(NVARCHAR(100), DECRYPTBYKEY(@EncryptedPhone)) AS 解密移动号码;

-- 解密邮箱
SELECT
    @Email AS 原始邮箱,
    @EncryptedEmail AS 加密邮箱,
    CONVERT(NVARCHAR(100), DECRYPTBYKEY(@EncryptedEmail)) AS 解密邮箱;

CLOSE SYMMETRIC KEY SymmetricBySy;
CLOSE SYMMETRIC KEY PasswordSymmetric;View Code 
#4,使用由非对称密钥加密的对称密钥(SymmetricByAsy)加密和解密

 
-- 打开被非对称密钥加密的对称密钥
OPEN SYMMETRIC KEY SymmetricByAsy
    DECRYPTION BY ASYMMETRIC KEY PasswordAsymmetric WITH PASSWORD = 'Pass#Tutorial#word';

DECLARE @MedicalInsuranceCardNumber NVARCHAR(15) = '888-545-6004';
DECLARE @EncryptedMedicalInsuranceCardNumber VARBINARY(256);

-- 加密医保卡号
SELECT @EncryptedMedicalInsuranceCardNumber = ENCRYPTBYKEY(KEY_GUID('SymmetricByAsy'), @MedicalInsuranceCardNumber);

-- 解密
SELECT
    @MedicalInsuranceCardNumber AS 原始医保卡号,
    @EncryptedMedicalInsuranceCardNumber AS 加密医保卡号,
    CONVERT(NVARCHAR(15), DECRYPTBYKEY(@EncryptedMedicalInsuranceCardNumber)) AS 解密医保卡号;

CLOSE SYMMETRIC KEY SymmetricByAsy;View Code 
更详细,可参考MSDN......
 

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

敖雨燕 发表于 2025-12-15 14:09:14

过来提前占个楼

吟氅 发表于 2025-12-30 08:13:44

感谢分享,学习下。

涣爹卮 发表于 2026-1-1 01:25:51

过来提前占个楼

仇华乐 发表于 2026-1-15 10:42:52

感谢分享,下载保存了,貌似很强大

轩辕琳芳 发表于 2026-1-19 11:35:55

鼓励转贴优秀软件安全工具和文档!

驼娑 发表于 2026-1-20 16:13:35

鼓励转贴优秀软件安全工具和文档!

曲愍糙 发表于 2026-1-23 07:02:42

喜欢鼓捣这些软件,现在用得少,谢谢分享!

挡缭 发表于 2026-1-27 09:01:11

新版吗?好像是停更了吧。

莘度 发表于 2026-2-4 08:44:16

谢谢分享,辛苦了

龙玮奇 发表于 2026-2-6 04:54:39

感谢分享,下载保存了,貌似很强大

懵诬哇 发表于 2026-2-8 08:21:51

感谢发布原创作品,程序园因你更精彩

忌才砟 发表于 2026-2-8 16:27:04

感谢,下载保存了

郦湘云 发表于 2026-2-9 02:04:37

感谢分享,学习下。

邹语彤 发表于 2026-2-10 11:38:20

鼓励转贴优秀软件安全工具和文档!

辉伫 发表于 2026-2-10 14:14:25

感谢发布原创作品,程序园因你更精彩

嗳诿 发表于 2026-2-11 18:38:10

分享、互助 让互联网精神温暖你我

殷罗绮 发表于 2026-2-12 13:22:54

懂技术并乐意极积无私分享的人越来越少。珍惜

馏栩梓 发表于 2026-2-12 14:52:37

前排留名,哈哈哈

凤患更 发表于 2026-2-12 16:53:09

鼓励转贴优秀软件安全工具和文档!
页: [1] 2
查看完整版本: MS SQL Server 数据加密与解密实例