1

无论如何我可以运行更新查询以将一列纯文本存储密码更改为在 msaccess 中 md5+salt'ed 的列?

我试过这个:

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

但是当然它没有用,如果我把表名放在前面,比如:users.Pass,那么它会要求一个文件,如果我不这样做,它会告诉我访问找不到输入表。而且没有 CONCAT 函数,我根本不明白。

我正在尝试将访问数据库转换为 mysql 数据库以将客户导入到 magento 安装中,并且没有很多访问经验。谢谢。

4

1 回答 1

3

我建议制作一个循环遍历所有记录并为每条记录设置 Pass 的 DAO 循环。您必须为 VBA 编写一个 MD5 散列函数或找到一个,或者如前所述,使用 SHA1。

Access 和 Access/Jet/DAO SQL 中的连接是使用与号或加号完成的。

这是一个使用 SHA1 散列字符串的函数。它返回一个 40 个字符的十六进制字符串。我不确定这是否与 Magento 散列算法兼容。

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 上找到 DAO 循环的代码: Code to loop through all records in MS Access

于 2013-07-30T17:19:22.217 回答