我正在加密包含敏感数据的文本字符串。我需要将这些加密的字符串保存到MySQL db中。字符串是密码文本,所有字符(可打印的ASCII控制字符到null的可能性相同)。
这些字符串不长(< 40个字符)。我使用Ruby2.1(无Rails)以及带有自定义salt和iv的加密器gem进行加密。gem是Ruby的openssl的包装器。
对于许多字符串,这是很好的工作。然而,我遇到了一小部分这些字符串,一旦加密,包含非法或不正确的引号。因此,当字符串被保存时,我会得到一个错误。
处理加密值的最佳方法是什么,以便将其可靠地保存到MySQL?
这是我的加密命令:
require 'encryptor'
encrypted_value = Encryptor.encrypt(@sensitive_string,
:key => @config["encryption"]["key"],
:iv = @config["encryption"]["iv"],
:salt => @config["encryption"]["salt"]) 以下是加密的值:
encrypted_value: /:Z`߉Nc??"v'??\??؟??????Oa?jR还有一张截图,因为有些角色没有正确复制:

MySQL更新语句:
query = "UPDATE db.table
SET `key` = mysql_real_escape_string(#{encrypted_value})"对于查询中的值,它如下所示:
query UPDATE db.table
SET `key` = mysql_real_escape_string(/:Z`߉Nc??"v'??\??؟??????Oa?jR)我已经尝试过MySQL引号和mysql_real_escape_string函数。我得到了两个相同的错误,也用双引号和单引号包装encrypted_value。
然后我得到了这个错误:
wrong number of arguments (0 for 2) (ArgumentError)解决这个问题的最好方法是什么?如有任何建议,敬请见谅。
发布于 2015-10-07 17:50:51
您可以执行加密字符串的base64编码,并将编码的值存储在DB中。
检索值时,可以将其解码回二进制文件并对其进行解密。
require "base64"
enc = Base64.encode64('Send reinforcements')
# -> "U2VuZCByZWluZm9yY2VtZW50cw==\n"
plain = Base64.decode64(enc)
# -> "Send reinforcements"http://ruby-doc.org/stdlib-2.2.0/libdoc/base64/rdoc/Base64.html
https://stackoverflow.com/questions/32998737
复制相似问题