这是我的第一个问题,我希望以正确的格式发布。
我使用来自vb.Net的MySQL AES_ENCRYPT / AES_DECRYPT来存储和获取用户图片和文件的位置。即使是特殊的西班牙语字符,一切都很好,除非我得到路径。
e.g
已保存路径= C:\ Users \ User \ Pictures和get = C:UsersUserPictures
我尝试使用许多代码也搜索MySQL文档但没有成功仍然跳过反斜杠。
请给我一个解决方法。
Dim MySQLQuery As String = "INSERT INTO `Agents` (`User_Name`, `User_Pic`)
VALUES (AES_ENCRYPT('" & txtUserName.Text & "', '" & MyPass & "'),
AES_ENCRYPT('" & txtUserPic.Text & "', '" & MyPass & "'"
MySQLQuery = "SELECT AES_DECRYPT(`User_Name`, '" & MyPass & "')
AS UName, AES_DECRYPT(`User_Pic`, '" & MyPass & "') AS UPic
FROM `Agents`"
MsgBox(MySQLReader.GetString("UName") & vbCrLf &
MySQLReader.GetString("UPic")
即使我尝试在MySQL上使用其他数据类型作为VARBINARY,VARCHAR,TINYTEXT,有和没有UTF8,LATIN1等,并且总是相同,跳过反斜杠。
答案 0 :(得分:0)
在AES_ENCRYPT
中,输入的数据被视为带有转义字符的二进制字符串。因此,当您加密\
并再次解密时,结果会得到一个空字符串。要保留\
,您必须预先解析字符串并将\
替换为\\
。这将在解密中保留您的\
(但解密后的字符串只显示一个\
)。
示例:
SELECT AES_DECRYPT(AES_ENCRYPT("s\ad",'test'),'test');
返回:sad
(所以不是很好的回报)。
SELECT AES_DECRYPT(AES_ENCRYPT(REPLACE("s\ad","\","\\"),'test'),'test');
返回:s\ad
还是很难过。
最后:100%与mysql相关,0%与vb相关。