postgresql des encrypt

KIM*_*KIM 0 encryption postgresql pgcrypto

我有oracle数据库移动到新的postgresql服务器.

有些表具有字段sesitive,并且这些表都通过DBMS_OBFUSCATION_TOOLKIT.DESENCRYPT/DESDECRYPT加密.

问题出在这里.postgresql的加密数据大小(bytea类型)的大小应该与oracle相同.

我试图用aes(加密/解密)完成它,它比原始数据大约三倍.(oracle使用des算法需要16byte,postgresql使用aes需要33byte,原始数据需要13byte.)

我也尝试了postgresql crypt,但是手册没有提到解密它的方式,限制了8byte的原始数据大小.

现在我真的需要加密方法,它采用尽可能小的加密数据大小并提供解密方法.

有没有好办法或其他选择?提前致谢.

Cra*_*ger 6

Crypt和DES是旧的密码,不应该使用

普通的旧DES是一种过时的算法.你不能真正有效地将它与AES128进行比较; 这就像抱怨SHA256散列大于MD5散列 - 是的,但是只有其中一个可能会让攻击者慢下来一段时间.DES 甚至在1999年广泛认为是弱的,不应该用于新的应用.不要使用它.

我认为寻找一种"提供尽可能小的数据大小"的加密方法并不是一个好主意 - 因为使用DES加密数据基本上是浪费时间.为什么不使用ROT13(caesar cypher)?"加密"结果与输入的大小相同,可惜加密可以被3岁的孩子打破.

地穴是一个类似的年份.旧的UNIX crypt散列算法是......老年人......并且完全不适合任何新的应用程序.哈希至少应该是SHA256,真的.

Crypt是单向哈希

至于无法弄清楚如何解密加密数据:crypt不是加密算法,它是加密哈希函数或"单向哈希".单向散列适用于验证数据未经修改,与存储的用于密码验证的盐渍散列相比较,用于质询 - 响应验证等.您无法解密加密数据.

处理大小

使用一个像样的加密功能,并与大小增加生活.bf或者aes128是你可以合理使用的最弱者.

我个人更喜欢在应用程序中进行加密/解密,而不是在数据库中.如果在DB中完成,则可以通过pg_stat_statements日志log_statement或错误等来显示密钥.更好的是,密钥永远不会与存储的数据完全相同.

大多数编程语言都有可以使用的良好加密例程.

由于您没有真正解释您正在加密的内容,原因,您的要求是什么,威胁是什么等等,因此很难提供更多建议.

密码?

如果您正在存储密码,那么您可能做错了.

  • 如果可能,让其他人进行身份验证:

    • 用于Internet的OAuth或OpenID

    • Intranet的SSPI,Kerberos/GSSAPI,Active Directory,LDAP绑定,SASL,HTTP DIGEST等

  • 如果您真的必须自己进行身份验证,请在密码中添加一个salt并对结果进行哈希处理.存储哈希和盐.如果必须比较密码,请使用与存储的哈希相同的盐对用户的新纯文本进行加盐,对新密码+ salt进行哈希处理,并查看哈希值与存储的哈希值是否相同.如果是,他们给出了正确的密码.

  • 您几乎肯定不需要恢复明文密码.实现安全密码重置.如果你真的必须使用像aes这样的安全算法加密它们并仔细考虑密钥存储和管理.请参阅有关使用pgcrypto进行密钥存储/管理的其他帖子.

也可以看看: