2016-09-07 78 views
2

我們有一個應用程序,它按照以下順序在數據庫中存儲密碼; 它反轉了用戶創建的原始密碼並將字符加1。例如,如果我選擇了密碼 - 'demo' - 密碼將存儲爲'pnfe' - 我使用反向(),它反轉所以不是演示被存儲爲pfne現在將存儲爲ENFP在這裏你可以清楚地看到ENFP演示與1個字符遞增。反轉密碼字符串,然後對每個字符反轉顯示字母表中的前一個字母

我最近開始在這家公司工作,決不是我的程序員,但我喜歡環顧數據庫表,偶然偶然發現了這張桌子。我希望能夠在運行腳本或查詢時看到密碼的原因是因爲這裏的人們每隔一週都會忘記密碼,所以我們要麼重置密碼,要麼我通常會嘗試解決這個問題,這是一個schlepp 。任何幫助,將不勝感激。

歡呼 傑森

+1

如果你正在嘗試對數據進行加密,您可以使用可用的加密其他優雅的方式在SQL Server –

+0

哦......哦,我的..這很可能會成爲純文本密碼。主要沒有沒有。 – Kritner

+1

密碼應該永遠是單向的!不應該解密;您的前端必須處理這一問題,通過回答一些安全問題讓用戶自行重置密碼 – techspider

回答

1

MSDN有一個很好的例子。我將其修改爲採用之前的ASCII值來反轉您的數據庫,然後將其返回。

if object_id('tempdb..#psswd') is not null drop table #psswd 
create table #psswd (userid int, pswd varchar(40)) 
insert into #psswd (userid, pswd) values (1,'pnfe'), (2,'tofuujl') 

DECLARE @userID int = 2 


-- Create variables for the character string and for the current 
-- position in the string. 
DECLARE @position int 
-- Initialize the current position and the string variables. 
SET @position = 1; 
WHILE @position <= DATALENGTH((SELECT pswd FROM #psswd WHERE userid = @userID)) 
    BEGIN 
     SELECT CHAR(ASCII(SUBSTRING(REVERSE(pswd), @position, 1)) - 1) FROM #psswd WHERE userid = @userID 
    SET @position = @position + 1 
    END; 
GO 

Credit

+0

謝謝你的解決方案,它的工作很好。但有一件事,我該如何工作,以便當我運行腳本/查詢時,它將查看我的登錄表並在密碼列上執行反轉操作,而不必每次都要創建一個_tempdb_來檢查密碼用戶。 'DECLARE @position int DECLARE @userid int SET @position = 1; ((CAST([password] as int)) WHILE @position <= DATALENGTH((SELECT [password] FROM [MobileQualityDB]。[dbo]。[qmob_login] WHERE username = @userID)) BEGIN ))FROM [MobileQualityDB]。[dbo]。[qmob_login] SET @position = @position END; GO' – JasonK

+0

@JasonK臨時表僅用於向您顯示結果。您可以省略前三行,並用您的表名稱替換#psswd。當然,您需要將用戶標識更改爲用於提取員工的任何內容,例如他們的姓名或登錄標識等。 – scsimon

+0

@JasonK對不起,只有一半的帖子出現在我的手機上。將最後一個選擇改爲:SELECT CHAR(ASCII(SUBSTRING(REVERSE([password]),@position,1)) - 1)FROM [MobileQualityDB]。[dbo]。[qmob_login] WHERE username = @ userID' – scsimon

相關問題