首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果密码文本有非法字符,如何将其保存到db?

问如果密码文本有非法字符,如何将其保存到db?
EN

Stack Overflow用户
提问于 2015-10-07 17:29:16
回答 1查看 497关注 0票数 1

我正在加密包含敏感数据的文本字符串。我需要将这些加密的字符串保存到MySQL db中。字符串是密码文本,所有字符(可打印的ASCII控制字符到null的可能性相同)。

这些字符串不长(< 40个字符)。我使用Ruby2.1(无Rails)以及带有自定义salt和iv的加密器gem进行加密。gem是Ruby的openssl的包装器。

对于许多字符串,这是很好的工作。然而,我遇到了一小部分这些字符串,一旦加密,包含非法或不正确的引号。因此,当字符串被保存时,我会得到一个错误。

处理加密值的最佳方法是什么,以便将其可靠地保存到MySQL?

这是我的加密命令:

代码语言:javascript
复制
require 'encryptor'
encrypted_value = Encryptor.encrypt(@sensitive_string, 
:key => @config["encryption"]["key"], 
:iv = @config["encryption"]["iv"], 
:salt => @config["encryption"]["salt"]) 

以下是加密的值:

代码语言:javascript
复制
encrypted_value: /:Z`߉Nc??"v'??\??؟??????Oa?jR

还有一张截图,因为有些角色没有正确复制:

​

MySQL更新语句:

代码语言:javascript
复制
query = "UPDATE db.table  
SET `key` = mysql_real_escape_string(#{encrypted_value})"

对于查询中的值,它如下所示:

代码语言:javascript
复制
query UPDATE db.table 
             SET `key` = mysql_real_escape_string(/:Z`߉Nc??"v'??\??؟??????Oa?jR)

我已经尝试过MySQL引号和mysql_real_escape_string函数。我得到了两个相同的错误,也用双引号和单引号包装encrypted_value。

然后我得到了这个错误:

代码语言:javascript
复制
wrong number of arguments (0 for 2) (ArgumentError)

解决这个问题的最好方法是什么?如有任何建议,敬请见谅。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-07 17:50:51

您可以执行加密字符串的base64编码,并将编码的值存储在DB中。

检索值时,可以将其解码回二进制文件并对其进行解密。

代码语言:javascript
复制
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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32998737

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档