使用MySQL AES_ENCRYPT / AES_DECRYPT恢复图片路径的VB.Net错误

时间:2015-07-23 00:18:11

标签: mysql vb.net

这是我的第一个问题,我希望以正确的格式发布。

我使用来自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等,并且总是相同,跳过反斜杠。

1 个答案:

答案 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相关。