2012-06-27 91 views
2

我加密了我的密碼字段並將其插入MySQL表中。 之後我解密該列由如何通過解密在mysql中查看原始數據?

select fld_user,fld_pwd,AES_DECRYPT(fld_encryptedpwd,'key') 
    from users 
where fld_id='1903'; 

但是,其結果是顯示「BLOB」。我使用Varbinary()作爲加密列的數據類型。我該做什麼 ?

+0

您不提「它在哪裏顯示爲BLOB」。哪個MySQL版本? – geertjanvdk

+1

另外,您不應該使用AES_ENCRYPT()來存儲密碼。您應該至少使用SHA-1這樣的單向散列。一旦人們獲得密鑰,加密就比僅僅存儲純文本還要糟糕。 – geertjanvdk

+0

@geertjanvdk BLOB顯示在我的輸出字段中,我無法使用單向哈希。因爲,有時我需要解密密碼字段 – Dhileepan

回答

5

在MySQL Workbench中的解決方案是爲SQL編輯器切換以下選項:「將BINARY/VARBINARY作爲非二進制字符串處理」。至少在MacOS X上,您需要重新啓動Workbench才能使選項生效。 (您也可以右鍵單擊該值並執行「在查看器中打開值」)。

如果你不想改變工作臺的選項,你可以使用CAST()功能作爲一個字符串返回的AES_DECRYPT()結果:

SELECT fld_user, fld_pwd, CAST(AES_DECRYPT(fld_encryptedpwd, 'key') AS CHAR) 
FROM users WHERE fld_id='1903'; 

了一個小竅門檢查/確認哪些數據類型函數返回的是使用MySQL CLI執行以下操作:

mysql> CREATE TALBE tmp1 AS SELECT AES_DECRYPT(fld_encryptedpwd, 'key') 
     FROM users WHERE fld_id='1903'; 
mysql> DESC tmp1; 

這將顯示將返回哪種數據類型。

(同樣,存儲加密密碼:不太好。)

+0

將tmp1表的密碼存儲爲BLOB。我需要得到我的原始密碼。我的原始密碼是'test123' – Dhileepan

+0

BLOB =二進制大對象= varbinary。 CAST是否工作? –

+0

@geertjanvdk Cast正在工作,CAST()的目的是什麼? – Dhileepan

相關問題