在sqlserver中,可以通過內置函數EncryptByPassPhrase對字符串進行加密,通過內置函數DecryptByPassPhrase對加密后的密文進行解密。
代碼如下:
declare @UserName nvarchar(100)='張三' declare @Encrypt varbinary(max)=null --加密 select @Encrypt=ENCRYPTBYPASSPHRASE('12312#$#2sj',@UserName) select @Encrypt as EncryptText --解密 select CONVERT(nvarchar,DECRYPTBYPASSPHRASE('12312#$#2sj',@Encrypt)) as DecryptText
EncryptByPassPhrase與DecryptByPassPhrase在配對的時候,一定要記住加密時字符串的類型,nvarchar和varchar是不一樣的。加密時為nvarchar,解密時轉為varchar,解密后的字符串是亂碼。加密和解密時,對應的字符串類型一定要一樣,同是nvarchar,或同是varchar。為何?編碼不一樣!
如下代碼:
declare @UserName nvarchar(100)='張三' declare @Encrypt varbinary(max)=null --加密 select @Encrypt=ENCRYPTBYPASSPHRASE('12312#$#2sj',@UserName) select @Encrypt as EncryptText --解密 select CONVERT(varchar,DECRYPTBYPASSPHRASE('12312#$#2sj',@Encrypt)) as DecryptText
@UserName的累心是nvarchar,而以varchar類型作為解密的文本類型,則會產生如下錯誤結果:
參考資料:https://docs.microsoft.com/zh-cn/sql/t-sql/functions/encryptbypassphrase-transact-sql?redirectedfrom=MSDN&view=sql-server-ver15