当我尝试使用密钥(从属性文件中检索)解密密码列(PWD_COL)时,Hibernate中的@Formula
注释出现问题
代码:
@Formula("decrypt(PWD_COL, '" + MyKeys.DECRYPT_KEY + "')")
private String myPwd;
我正试图从另一个属性文件中获取DECRYPT_KEY。
我收到错误:
注释属性Formula.value的值必须是常量 表达
或者,有没有办法模仿Java中的SQL解密函数?
注意:请将密码字段作为另一个值读取。这项练习的最终目的是为了一些不太重要的东西,但仍然需要加密。
答案 0 :(得分:1)
@Formula
注释的值必须是有效的SQL,因为它或多或少地直接传递给底层数据库。
这也解释了为什么你的想法不起作用 - 数据库将没有MyKeys
类的概念。
您可以在数据库表格中插入密钥,并在select
中从@Formula
插入密钥,但安全方面可能不是特别理智的...
你真正应该做什么(或者实际上不做)是避免存储密码,而是存储密码的哈希值,然后将这些哈希值与用户呈现的任何凭据的哈希值进行比较。这会将加密/散列转移到Java /内存并避免在有人窃取您的数据库时出现的尴尬,猜测弱密码或强制加密并将其全部发布到pastebin上!
干杯,
答案 1 :(得分:1)
我知道这不是你想要的,但是让我给你一个关于数据库商店密码的建议,也许你应该改变你对如何处理密码的看法。
由于安全原因,您不应该在数据库上解密密码,因此如果有人丢失了密码,他们应该创建一个新密码。
要验证登录和相关任务,您应该从表单中获取密码,加密并与数据库中的加密数据进行比较。
如果你真的想继续这样做,请使用@formula和有效的sql值。