首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> SQL Server 2008

SQL Server 2008 非對稱金鑰加密完整實作:建立、查詢、修改私鑰密碼、資料加解密

     編輯:SQL Server 2008

前言

非對稱金鑰 擁有公開金鑰 (加密) 與私鑰 (解密),安全性高但資源消耗大,不建議直接加密大量資料。本文示範建立、查詢、修改私鑰密碼、資料加解密與刪除完整流程。

範例一:建立非對稱金鑰

USE DB_Encrypt_Demo; GO
CREATE ASYMMETRIC KEY asymDemoKey
WITH ALGORITHM = RSA_512
ENCRYPTION BY PASSWORD = 'TestASYM123!'; GO

範例二:查看非對稱金鑰

SELECT name, algorithm_desc, pvt_key_encryption_type_desc
FROM sys.asymmetric_keys;
name        algorithm_desc  pvt_key_encryption_type_desc
asymDemoKey RSA_512         ENCRYPTED_BY_PASSWORD

範例三:修改私鑰密碼

ALTER ASYMMETRIC KEY asymDemoKey
WITH PRIVATE KEY (
    ENCRYPTION BY PASSWORD = 'newpasswordE4D352F280E0',
    DECRYPTION BY PASSWORD = 'TestASYM123!'); GO

範例四:資料加解密

-- 建表
CREATE TABLE BankUser (
    PKID int PRIMARY KEY IDENTITY(10001,1),
    UserNo varbinary(1000) NULL,
    CurState smallint DEFAULT 0 NOT NULL
); GO

-- 加密寫入
INSERT BankUser (UserNo, CurState)
VALUES (EncryptByAsymKey(AsymKey_ID('asymDemoKey'), N'137492837583249ABR'), 1); GO

-- 查看密文
SELECT PKID, CurState, CAST(UserNo AS nvarchar(1000)) AS UserNo FROM BankUser WHERE PKID = 10001;

密文內容

-- 解密讀取 (需提供私鑰密碼)
SELECT PKID, CurState,
       CAST(DecryptByAsymKey(AsymKey_ID('asymDemoKey'), UserNo, N'newpasswordE4D352F280E0') AS varchar(1000)) AS UserNo
FROM BankUser WHERE PKID = 10001;

解密後明文

範例五:刪除非對稱金鑰

DROP ASYMMETRIC KEY asymDemoKey; GO

小結

  1. 非對稱金鑰提供強加密,但 CPU 開銷大,不建議直接加密大量資料。
  2. 典型用途:加密對稱金鑰、小型敏感欄位 (如信用卡號)、數位簽章。
  3. 私鑰受密碼或資料庫主金鑰保護,修改密碼需同時提供新舊密碼。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved