gpt4 book ai didi

mysql - 如果有非法字符,如何将密文保存到数据库?

转载 作者:行者123 更新时间:2023-11-29 06:21:42 25 4
gpt4 key购买 nike

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

这些字符串不长(< 40 个字符)。我正在使用 Ruby 2.1(无 Rails)以及带有自定义盐和 iv 的加密器 gem 来进行加密。 encryptor 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

和截图,因为一些字符没有正确复制: enter image description here

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 Quote 和 mysql_real_escape_string 函数。我得到了同样的错误,并且还用双引号和单引号将 encrypted_value 包装起来。

然后我得到这个错误:

wrong number of arguments (0 for 2) (ArgumentError)

解决这个问题的最佳方法是什么?任何建议表示赞赏。

最佳答案

可以对加密后的字符串进行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

关于mysql - 如果有非法字符,如何将密文保存到数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32998737/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com