草庐IT

mysql aes_encrypt 到 longtext 列

coder 2023-10-24 原文

是否可以将 MySQL AES_ENCRYPT 存储到 LONGTEXT 列中?

我知道我假设使用 varbinary 或 blob,但我有一个表,我在其中存储了一堆随机“设置”,并且 settings_value 列是长文本。

我去那里存储一个“smtp 邮件密码”,有点卡住了。

如果没有,我想,我会通过 php 将其存储为十六进制字符串。

解决方案:

我的查询是这样的:

INSERT INTO table (setting_value)VALUES(AES_ENCRYPT('password', 'key')) ON DUPLICATE KEY UPDATE setting_value=VALUES(setting_value)

正如您将在下面的评论中看到的那样,我尝试将列编码从 utf8_unicode_ci 更改为 utf8_bin,但仍然失败。我更改为 latin1_bin 并且有效。

我切换回 utf8_unicode_ci 并将查询更改为以下内容:

INSERT INTO table (setting_value)VALUES(HEX(AES_ENCRYPT('password', 'key'))) ON DUPLICATE KEY UPDATE setting_value=VALUES(setting_value)

这行得通,因为它只是将我的值转换为十六进制字符串。

我花了一点时间弄清楚如何正确取回值,因此出于文档目的:

$pass = SELECT AES_DECRYPT(BINARY(UNHEX(setting_value)), 'key') as orig_text FROM table
echo $pass->orig_text

最佳答案

你试过吗?设置测试用例非常容易,据我所知,它可以很好地满足您的要求:

mysql> create table t (id int unsigned not null auto_increment primary key, str LONGTEXT);
Query OK, 0 rows affected (0.13 sec)

mysql> desc t;
+-------+------------------+------+-----+---------+----------------+
| Field | Type             | Null | Key | Default | Extra          |
+-------+------------------+------+-----+---------+----------------+
| id    | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| str   | longtext         | YES  |     | NULL    |                |
+-------+------------------+------+-----+---------+----------------+
2 rows in set (0.05 sec)

mysql> 
mysql> INSERT INTO t VALUES (1,AES_ENCRYPT('text','password'));
Query OK, 1 row affected (0.02 sec)

mysql> 
mysql> select id,str,AES_DECRYPT(str,'password') from t;
+----+-----------------------------+-----------------------------+
| id | str                         | AES_DECRYPT(str,'password') |
+----+-----------------------------+-----------------------------+
|  1 | ö½¨Ü·øÍJ/ª¼Tf€D            | text                        |
+----+-----------------------------+-----------------------------+
1 row in set (0.00 sec)

关于mysql aes_encrypt 到 longtext 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5654899/

有关mysql aes_encrypt 到 longtext 列的更多相关文章

  1. c# - 在 C# 中重现 Ruby OpenSSL private_encrypt 输出 - 2

    我有一个简单的Ruby脚本,我用它在某些HTTPheader上执行private_encrypt以签署要发送到ruby​​RESTAPI的Web请求,该API会根据Base64编码字符串测试Base64编码字符串生成而不是解码Base64和解密数据然后测试原始字符串。我使用的脚本是require"openssl"require"base64"path_to_cert=ARGV[0].dupplain_text=Base64.decode64(ARGV[1].dup)private_key=OpenSSL::PKey::RSA.new(File.read(path_to_cert))pu

  2. ruby-on-rails - ruby open ssl api for encrypted key (without nodes option) - 2

    在安装了openssllib的linux机器上,当您执行带有“-nodes”选项的“opensslpkcs12”时,您将获得带有未加密私钥的输出,但如果您跳过–nodes选项,则输出将具有加密的私钥。e.g.opensslpkcs12-intest.pfx-outtest.pem你应该看到像下面这样加密的私钥-----BEGINENCRYPTEDPRIVATEKEY-----MIIFDjBABgkqhkiGG7s=-----ENDENCRYPTEDPRIVATEKEY-----如何使用ruby​​的开放ssl库实现上述目标?这就是我用ruby​​生成私钥的方式:@private_key

  3. ruby-on-rails - 如何生成用于 attr_encrypted 的加密 key - 2

    我正在考虑使用attr_encrypted在Rails应用程序中用于字段级加密的gem。如何生成用于此gem的加密key?更新:Encryptor的文档,它是attr_encrypted使用的底层加密,声明如下(在Usage|Basic下):secret_key=Digest::SHA256.hexdigest('asecretkey')encrypted_value=Encryptor.encrypt('somestringtoencrypt',:key=>secret_key)我猜想key可以是任意长度的随机字符串,而对hexdigest的调用将从中计算出适当的固定长度字符串。这是

  4. javascript - 谷歌电子表格 : Encrypt cell content with Google Apps Script - 2

    我有一个谷歌电子表格,想加密几个单元格的内容(只要有适用于iOS的等效解密方法,我不在乎使用哪种加密方法)。不幸的是,GoogleAppsScript中没有内置的加密功能。出于这个原因,我想使用像Crypto-JS这样的开源Javascript库。和sjcl.如何将这些库之一与GoogleAppsScript结合使用?在GoogleAppsScript文档中,我没有找到任何关于如何在我的GoogleAppsScript中使用外部JavaScript库的线索。 最佳答案 好吧,我会这么说,因为这是我在DateJS中使用的方法。.您可以

  5. encryption - 用公钥解密 - 2

    关闭。这个问题需要更多focused.它目前不接受答案。想改进这个问题吗?更新问题,使其只关注一个问题editingthispost.关闭5年前。Improvethisquestion如何在golang中解密使用私钥签名的消息?$opensslgenrsa-out./server/server.keyGeneratingRSAprivatekey,2048bitlongmodulus..................+++.............................................+++$opensslrsa-in./server/server.key-

  6. encryption - Golang加密密文开头padding为As - 2

    关闭。这个问题需要debuggingdetails.它目前不接受答案。编辑问题以包含desiredbehavior,aspecificproblemorerror,andtheshortestcodenecessarytoreproducetheproblem.这将有助于其他人回答问题。关闭5年前。Improvethisquestion我正在尝试使用自定义IV进行加密,但它会生成一个开头填充As的密文,例如AAAAAAAAAAAAAAAAAAAAACbglBtdgH3ajX1jgkOaVAsFYyDxRRI=我遵循了https://gist.github.com/manishtpate

  7. encryption - 从 PHP 到 Go 的 Mcrypt - 2

    我在PHP中使用一个类来加密/解密字符串。我如何在Go中加密/解密字符串?PHP类:classCrypto{private$encryptKey='xxxxxxxxxxxxxxxx';private$iv='xxxxxxxxxxxxxxxx';private$blocksize=16;publicfunctiondecrypt($data){return$this->unpad(mcrypt_decrypt(MCRYPT_RIJNDAEL_128,$this->encryptKey,hex2bin($data),MCRYPT_MODE_CBC,$this->iv),$this->blo

  8. encryption - golang中如何使用rsa key 对进行AES加解密 - 2

    我想生成RSAkey对(公钥和私钥),然后将它们用于AES加密和解密。例如公钥用于加密,私钥用于解密。我为此编写了一个简单的代码,但问题是当我运行这段代码时出现此错误:crypto/aes:invalidkeysize1639我该如何解决这个问题??我的加密代码如下://genratingprivatekeyprivateKey,err:=rsa.GenerateKey(rand.Reader,2014)iferr!=nil{return}privateKeyDer:=x509.MarshalPKCS1PrivateKey(privateKey)privateKeyBlock:=pem

  9. encryption - 加密数据的机器学习 - 2

    我想使用GO在加密数据上实现机器学习模型(KNN或随机森林)。我的数据是用HElib(同态加密)加密的,这意味着我仍然可以对加密数据执行ADD和MUL。我的问题是:我是否必须使用GO重新实现所有机器学习算法,或者我可以使用一些“golearn”库吗?使用golearn库的GO的KNN实现示例:rawData,err:=base.ParseCSVToInstances("../datasets/iris_headers.csv",true)iferr!=nil{panic(err)}//InitialisesanewKNNclassifiercls:=knn.NewKnnClassifi

  10. php - 在PHP中解密由openssl_encrypt加密的AES-256-CBC密文时出现坏 block 大小错误 - 2

    我有一个PHP模块,它使用openssl_encrypt使用aes-256-cbc加密电子邮件。本模块生成的密文也可以用本模块解密。但是,如果我尝试使用相同的IV和key在Go中使用aes-256-cbc的实现来解密它们,我会得到一个badblocksize错误。block大小应该是16的倍数,但PHP生成的密文不是16的倍数。这是代码packagemainimport("crypto/aes""crypto/cipher""crypto/sha256""encoding/base64""encoding/hex""fmt")var(IV=[]byte("fg3Dk54f4340fKF

随机推荐