2012-06-28 58 views
0
alter PROC [dbo].[Ins_Users] 
@UserID int , 
@UserName nvarchar (max) , 
@Password nvarchar (max) , 
@Name nvarchar (100) , 
@Family nchar (10) , 
@LastLoginDate datetime 
AS 
BEGIN 
----------------------------------------- 
DECLARE @Passphrase nvarchar(128); 
declare @newPass nvarchar(max); 
declare @temp varbinary(max); 
SET @Passphrase 
    = 'hadi'; 
SET @temp= EncryptByPassPhrase(@Passphrase,@Password); 
set @newPass=CONVERT(nvarchar(max),@temp); 
----------------------------------------- 
    INSERT INTO [dbo].[Users] 
     ( 
     [UserID], 
     [UserName], 
     [Password], 
     [Name], 
     [Family], 
     [LastLoginDate] 
     ) 
     VALUES 
     ( 
     @UserID, 
     @UserName, 
     @newPass, 
     @Name, 
     @Family, 
     @LastLoginDate 
     ) 
END 

我想加密通過befor將它存儲在db中。我使用的EncryptByPassPhrase函數返回一個varbinary作爲結果 ,但我的傳遞列有nvarchar類型,所以我轉換結果爲nvarchar set @ newPass = CONVERT(nvarchar(max),@ temp);返回結果 。 當我跟蹤它的加密結果是真實的,但轉換的結果是空的。用sql中的EncryptByPassPhrase函數加密密碼

+0

當您獲取varbinary值的ASCII表示形式時,無法使用convert。我確信會有一種方法,但我已經編寫了一個加密庫,即使沒有考慮數據類型也很難調試。我的建議是使用varbinary列,如果由於某種原因需要保留varchar,那麼保留它們。 – iain

回答