sql加密函數
對MSSQL的用戶信息有興趣的,可能會發現master.dbo.sysxlogins裡面存放著用戶的口令,可是呢,password欄位如果不是null就是一堆看不懂的binary,這個口令是怎麼加密的呢?
其實只要仔細看看master.dbo.sp_addlogin就知道了,MSSQL的sp都可以看到代碼,真是不錯。
讓我們來看看它是怎麼做的,注意這一行select @passwd = pwdencrypt(@passwd),這個時後@passwd就被加密了,讓我們也來試一下
DECLARE @ClearPWD varchar(255)
DECLARE @EncryptedPWD varbinary(255)
SELECT @ClearPWD = 'test'
SELECT @EncryptedPWD = CONVERT(varbinary(255), pwdencrypt(@ClearPWD))
SELECT @EncryptedPWD
看上去不錯,確實被加密了,可是我怎麼還原呢?
呵呵,這就沒戲了,口令加密都是單向的,用加密後的密文來比較就可以了。
繼續看看其它用戶相關的sp,可以發現master.dbo.sp_password裡面有口令比較的內容。
pwdcompare(@old, password, (CASE WHEN xstatus&2048 = 2048 THEN 1 ELSE 0 END))
不用去理會xstatus,這是一個狀態掩碼,一般我們用的時候就直接用0就可以了
DECLARE @ClearPWD varchar(255)
DECLARE @EncryptedPWD varbinary(255)
SELECT @ClearPWD = 'test'
SELECT @EncryptedPWD = CONVERT(varbinary(255), pwdencrypt(@ClearPWD))
SELECT pwdcompare(@ClearPWD, @EncryptedPWD, 0)
SELECT pwdcompare('ErrorPassword', @EncryptedPWD, 0)
這樣我們就可以使用這兩個函數來加密自己的密碼了
『貳』 如何利用MySQL資料庫自帶加密函數進行加密
首先,先介紹下加密函數,PASSWORD(string)函數可以對字元串string進行加密,代碼如下:
SELECT PASSWORD('you');
如下圖所示:
執行第一步的SQL語句,查詢結果是一串字元串,並且PASSWORD(string)函數加密是不可逆轉,
如下圖所示:
另外一個加密函數MD5(string),主要針對普通的數據進行加密,代碼如下:
SELECT MD5('hai');
如下圖所示:
最後一個加密函數ENCODE(string,pass),可以使用字元串pass來加密字元串string。首先要創建一個資料庫表t_pass_info,代碼如下:
CREATE TABLE t_pass_info(
id int(10),
pass_info blob
);
如下圖所示:
然後,向這個資料庫表插入一條數據,代碼如下:
INSERT INTO t_pass_info(id,pass_info) VALUES
(1,ENCODE('dong','bb'));
如下圖所示:
6
查看插入資料庫表t_pass_info記錄,代碼如下:
SELECT * FROM
t_pass_info;
如下圖所示:
7
MySQL自帶還有一個解密函數DECODE(str,pass_str),可以使用字元串pass_str來為str解密,代碼如下:
SELECT DECODE(ENCODE('dong','aa'),'aa');
如下圖所示:
『叄』 sql server中怎麼給資料庫表中的用戶密碼加密
1、首先我們電腦上要安裝有SQL Server,然後要准備一個MDF資料庫文件。打開SQL Server。
『肆』 MD5如何對sql加密
對SQL加密?
SQL
SERVER
有自己的一套安全系統驗證,它做的已經很好了
一般我們對SQL的加密都是對裡面數據內容的加密,而常用的是密碼的加密
現在常用的加密是MD5,把用戶的密碼加密後,保存到SQL資料庫
還有一種是對分布式SQL的加密,就ASP.NET
2.0而言,可以在web.config文件里的SQL網路鏈接字元進行加密,以保證SQL
server的安全性
如有其他問題請提出,很高興為你解答
『伍』 請問SQL怎麼對數據進行加密
--以下代碼包括創建密鑰,加密,解密和刪除密鑰
/*
1.利用對稱密鑰
搭配EncryptByKey進行數據加密
使用DecryptByKey函數進行解密
這種方式比較適合大數據量
*/
='XIAOMA'
='ZXCCERTIFICATE',EXPIRY_DATE='2015/01/01'
CREATESYMMETRICKEYSYM_TOMWITHALGORITHM=
OPENSYMMETRICKEYSYM_
SELECTCONVERT(NVARCHAR(10),Decryptbykey((Encryptbykey(Key_guid('SYM_TOM'),N'TOM3'))))
CLOSESYMMETRICKEYSYM_TOM
DROPSYMMETRICKEYSYM_TOM
DROPCERTIFICATETOMCERT;
DROPMASTERKEY;
--或--
=AES_256ENCRYPTIONBYPASSWORD='ZXC123456'
='ZXC123456'
SELECTCONVERT(VARCHAR(10),Decryptbykey(Encryptbykey(Key_guid('ZXC'),'YHDH_C')))
CLOSESYMMETRICKEYZXC;
DROPSYMMETRICKEYZXC;
/*
2.利用非對稱密鑰
搭配EncryptByAsymKey進行數據加密
使用DecryptByAsymKey函數進行解密
用於更高安全級別的加解密數據
*/
='XIAOMA'
=RSA_2048ENCRYPTIONBYPASSWORD='ZXC123456'
(DECRYPTIONBYPASSWORD='ZXC123456')
SELECTCONVERT(VARCHAR(100),Decryptbyasymkey(Asymkey_id('ABC'),Encryptbyasymkey(Asymkey_id('ABC'),'ZXC123456')))
DROPASYMMETRICKEYABC;
DROPMASTERKEY
/*
3.利用憑證的方式
搭配EncryptByCert進行加密
DecryptByCert函數進行解密
比較類似非對稱密鑰
*/
='XIAOMA'
='ZXCCERTIFICATE',EXPIRY_DATE='2015/01/01'
SELECTCONVERT(VARCHAR(20),Decryptbycert(Cert_id('ZXC'),Encryptbycert(Cert_id('ZXC'),'123456')))
DROPCERTIFICATEZXC;
DROPMASTERKEY
--或--
='Mary5',
SECRET='123456';
ALTERLOGINUser1
ADDCREDENTIALAlterEgo
DropCREDENTIALAlterEgo
DROPCREDENTIALAlterEgo
/*
4.利用密碼短語方式
搭配EncryptBypassPhrase進行加密
使用DecryptByPassPhrase函數來解密
比較適合一般的數據加解密
*/
SELECTCONVERT(VARCHAR(100),Decryptbypassphrase('xiaoma',Encryptbypassphrase('xiaoma','123456')))
『陸』 SQL pwdencrypt函數
insert into users (用戶名,密碼) values ('小名',pwdencrypt('111'));
update users set 密碼=pwdencrypt(密碼) where 用戶名='小名';
順便說一下, 只能加密, 不可解密, 也就是說此加密不可逆.
『柒』 sql資料庫怎麼加密
SQL Server中的加密簡介
在SQL Server2000和以前的版本,是不支持加密的。所有的加密操作都需要在程序中完成。這導致一個問題,資料庫中加密的數據僅僅是對某一特定程序有意義,而另外的程序如果沒有對應的解密演算法,則數據變得毫無意義。
到了SQL Server2005,引入了列級加密。使得加密可以對特定列執行,這個過程涉及4對加密和解密的內置函數
SQL Server 2008時代,則引入的了透明數據加密(TDE),所謂的透明數據加密,就是加密在資料庫中進行,但從程序的角度來看就好像沒有加密一樣,和列級加密不同的是,TDE加密的級別是整個資料庫。使用TDE加密的資料庫文件或備份在另一個沒有證書的實例上是不能附加或恢復的。
『捌』 SQL中是否有給表中某一個欄位加密的函數
如果是MySQL,有MD5(str)函數。
比如:SELECT MD5('111')
『玖』 如何在SQL Server資料庫中加密數據
熱心網友
在SQl2005下自帶的函數hashbytes()
,此函數是微軟在SQL
SERVER
2005中提供的,可以用來計算一個字元串的
MD5
和
SHA1
值,使用方法如下:
--獲取123456的MD5加密串
select
hashbytes('MD5',
'123456')
;
--獲取123456的SHA1加密串
select
hashbytes('SHA1',
'123456')
;有了這個函數可以在sqlserver中為字元串進行加密,但是hashbytes()
函數的返回結果是
varbinary類型,(以
0x
開頭
16
進制形式的二進制數據)通常情況下,我們需要的都是字元串型的數據,很多人首先想到的可能就是用
CAST
或
Convert
函數將varbinary
轉換為
varchar,但這樣轉換後的結果會是亂碼,正確轉換
varbinary
可變長度二進制型數據到
16
進制字元串應該使用系統內置函數
sys.fn_varbintohexstr()(只在sqlserver2005下有),如下所示:select
sys.fn_varbintohexstr(hashbytes('MD5',
'123456'))
然後就可以截取需要的部分select
lower(right(sys.fn_varbintohexstr(hashbytes('MD5','123456')),32))為md5加密串。
『拾』 sql中varbinary加密的簡單方法有什麼
1、可以使用二個SQLServer未公開的函數:
>PwdCncrypt(),實現對輸入數據進行加密後返回二進制形式的加密內容,
>PwdCompare(),用於檢查明文是否與加密的二進制數據內容相等,沒有解密函數。
這二個函數主要是用於SQLServer內部自己調用。優點是調用方便,缺點是這二個函數沒有公開,就意味著可能改變,並且不兼容原來的,在使用上存在風險。
2、若想控制密鑰,有4個函數
ENCRYPTBYASYMKEY() --非對稱密鑰
ENCRYPTBYCERT() --證書加密
ENCRYPTBYKEY() --對稱密鑰
ENCRYPTBYPASSPHRASE() --通行短語(PassPhrase)加密
使用起來相對會復雜些。