当前位置: 首页 > 知识库问答 >
问题:

尝试通过JDBC在MySQL中存储SecretKey、加密密码

上官正志
2023-03-14
mysql> SHOW COLUMNS FROM Accounts;
+----------+-------------+------+-----+---------+----------------+
| Field    | Type        | Null | Key | Default | Extra          |
+----------+-------------+------+-----+---------+----------------+
| id       | int(11)     | NO   | PRI | NULL    | auto_increment |
| username | varchar(45) | NO   | UNI | NULL    |                |
| password | blob        | NO   |     | NULL    |                |
| key      | blob        | NO   |     | NULL    |                |
+----------+-------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
public static void main(String[] args) throws Exception {

    String plainText = "test"; 
    SecretKey secKey = getSecretEncryptionKey(); // working correctly
    byte[] cipherText = encryptText(plainText, secKey); // working correctly
    String decryptedText = decryptText(cipherText, secKey); // working correctly
    byte[] secKey2 = secKey.getEncoded(); // necessary??

    try{  
        Class.forName("com.mysql.jdbc.Driver"); 
        Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/Test?useSSL=false","****","****");  // user/pass commented out
        Statement stmt = con.createStatement();  
        ResultSet rs = stmt.executeQuery("use Test;");  
        stmt = con.createStatement(); 
        stmt.executeUpdate("INSERT INTO Accounts (username, password, key) VALUES ('test1', '"+cipherText+"', '"+secKey2+"');");
        con.close();
    } catch(Exception e){ 
        System.out.println(e);
    }  

}
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'key) VALUES ('test1', '[B@735b478', '[B@2c9f9fb0')' at line 1

如有任何帮助,我们将不胜感激!

共有1个答案

羊舌承颜
2023-03-14

@jose_ferrer的回答完全正确地指出了代码的一些问题(例如:您存储的是字节数组的地址,而不是计算的散列)。

但是,您遇到的语法错误消息与此没有直接关系:您最终会在数据库中存储无用的字符串,但这不是数据库可以抱怨的。

语法错误似乎是由于将“key”保留字用作表的字段。SQL解析器正在抱怨在需要字段名的地方找到关键字(key)。

 类似资料:
  • MySQL Server Enterprise edition与Hashicorp集成,在静止状态下加密数据。加密密钥存储在HashiCorp存储库中,如MySQL文档中所述。 基于HashiCorp文档[1][2],我们可以使用Azure密钥库来存储秘密。 是否可以集成mysql-hashicorp-Azure密钥库 MySQL Enterprise Edition使用hashicorp加密 加

  • 我正在研究一个客户机-服务器安全协议,其中我需要使用Java中的RSA来加密HMAC摘要的SecretKey,因为密钥必须发送到服务器。加密分为两个阶段;首先,我需要用一个公共非对称密钥加密对称密钥,然后,该加密消息用一个私有非对称密钥加密。 为此,我将SecretKey生成为: 如何将SecretKey转换为字节数组,以便使用RSA和公钥对其进行加密? 由于公钥加密产生128字节的字节数组,如果

  • 我有一个文本文件,我已经加密使用移位,但我需要加密加密的文本再次,但这一次使用vigenere密码。然后我需要解密加密的文本(首先是vigenere,然后是Shift),但所有的大小写字母以及黑色空格、引号、逗号和句号都需要保持不变。我已经完成了移位、加密和解密,剩下的就是Vigenere了。下面显示的是我加密Vigenere的类,我还没有写解密,因为我被卡在加密步骤。谢谢你。

  • 我需要符合HIPAA标准,这些要求表明AES256加密足以存储敏感数据(名字,姓氏,SSN,ID,DOB,电话,VIN等)。 我倾向于通过应用程序代码加密,而不是使用MSSQL或MySQL内置的加密字段支持。避免SQL签名证书过程,设置MASTER KEY等。 我研究AES256加密使用。NET 6,大多数人被警告不要使用AES - CBC、ECB、EFB或CTS...事实上,即使是微软自己的文档

  • 我正在尝试将一个字节数组存储到mySQL中,其中包含加密的“密码”。我尝试过使用Blob和varbinary数据类型,但是当我提取加密的数据时,它似乎没有被正确解密,因为存储的字节数组与我开始使用的字节数组不同。 下面的加密/解密代码 我已经打印出字节数组,看看是否存在差异,正如您可以看到的,在转换到数据库时,它确实发生了变化,我不确定如何克服这个问题 字节数组输出(上为原始字节数组,下为来自数据

  • 我的PHP网站有以下内容: > 启用SSL Cookie: 传输时的密码SHA512,然后是password_hash(),最后是PASSWORD_BCRYPT 我现在希望使用AES_Encrypt函数加密敏感数据,方法是将用于加密和解密的$key存储在webroot目录之外。 这可能会存储病人的数据,我所拥有的是否足够安全? 问题: 当您插入/更新时,您是如何清理输入的?如果您使用的是准备好的语