@formula注释或sql解密函数

时间:2015-05-11 12:47:55

标签: java sql hibernate

当我尝试使用密钥(从属性文件中检索)解密密码列(PWD_COL)时,Hibernate中的@Formula注释出现问题

代码:

@Formula("decrypt(PWD_COL, '" + MyKeys.DECRYPT_KEY + "')")
private String myPwd;

我正试图从另一个属性文件中获取DECRYPT_KEY。

我收到错误:

  

注释属性Formula.value的值必须是常量   表达

或者,有没有办法模仿Java中的SQL解密函数?

注意:请将密码字段作为另一个值读取。这项练习的最终目的是为了一些不太重要的东西,但仍然需要加密。

2 个答案:

答案 0 :(得分:1)

@Formula注释的值必须是有效的SQL,因为它或多或少地直接传递给底层数据库。

这也解释了为什么你的想法不起作用 - 数据库将没有MyKeys类的概念。

您可以在数据库表格中插入密钥,并在select中从@Formula插入密钥,但安全方面可能不是特别理智的...

真正应该做什么(或者实际上不做)是避免存储密码,而是存储密码的哈希值,然后将这些哈希值与用户呈现的任何凭据的哈希值进行比较。这会将加密/散列转移到Java /内存并避免在有人窃取您的数据库时出现的尴尬,猜测弱密码或强制加密并将其全部发布到pastebin上!

干杯,

答案 1 :(得分:1)

我知道这不是你想要的,但是让我给你一个关于数据库商店密码的建议,也许你应该改变你对如何处理密码的看法。

由于安全原因,您不应该在数据库上解密密码,因此如果有人丢失了密码,他们应该创建一个新密码。

要验证登录和相关任务,您应该从表单中获取密码,加密并与数据库中的加密数据进行比较。

如果你真的想继续这样做,请使用@formula和有效的sql值。