2013-07-30 24 views
1

是否有無論如何我可以運行更新查詢將純文本存儲密碼的列更改爲msaccess中的md5 + salt'ed列?md5和MSAccess表中的列上的鹽

我嘗試這樣做:

UPDATE TableName 
SET Pass = CONCAT(MD5(CONCAT('salt', Pass)), ':salt'); 

但是,當然,它沒有工作,如果我第一次把表名,如:users.Pass,然後它要求一個文件,如果我沒有它它告訴我訪問無法找到輸入表。而且還有沒有CONCAT功能,我根本不明白。

我試圖將訪問數據庫轉換爲MySQL數據庫將客戶導入magento安裝,並沒有很多訪問經驗。謝謝。

+1

MS語言使用'+',而不是'concat'功能或SQL標準的''||。 – FrankPl

+1

我建議使用與MD5不同的哈希函數,因爲它很脆弱。即使你保護的數據微不足道,用戶也傾向於使用真正的密碼。 http://security.stackexchange.com是找出一些基礎知識的好起點。 – ashareef

+0

@ashareef - 但magento使用md5 +鹽,我不認爲我可以在導入過程中更改 – salty

回答

3

我建議製作一個循環遍歷所有記錄併爲每個記錄設置Pass的DAO循環。您必須爲VBA編寫一個MD5散列函數,或者找到一個或已經建議使用SHA1。

Access和Access/Jet/DAO SQL中的連接使用&符號或加號完成。

這是一個使用SHA1散列字符串的函數。它返回一個40字符的十六進制字符串我不確定如果這將與Magentos哈希算法兼容。

了一個DAO循環
Public Function SHA1Hex(S As String) As String 
    Dim asc, enc, bytes, outstr, pos 
    'Borrow some objects from .NET (supported from 1.1 onwards) 
    Set asc = CreateObject("System.Text.UTF8Encoding") 
    Set enc = CreateObject("System.Security.Cryptography.SHA1CryptoServiceProvider") 
    'Convert the string to a byte array and hash it 
    bytes = asc.GetBytes_4(S) 
    bytes = enc.ComputeHash_2((bytes)) 
    outstr = "" 
    'Convert the byte array to a hex string 
    For pos = 1 To LenB(bytes) 
     outstr = outstr & LCase(Right("0" & Hex(AscB(MidB(bytes, pos, 1))), 2)) 
    Next 
    SHA1Hex = outstr 'Returns a 40 byte/character hex string 
    Set asc = Nothing 
    Set enc = Nothing 

End Function 

代碼可以在SO在這裏找到: Code to loop through all records in MS Access