postgresql des encrypt



我有oracle数据库要转移到新的postgresql服务器上。

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

问题就在这里。postgresql的加密数据大小(字节类型)应该与oracle的相同。

我试着用aes(加密/解密)来完成它,它占用的数据几乎是原始数据的三倍。(oracle用des算法取16字节,postgresql用aes取33字节,原始数据为13字节。)

我也尝试过postgresql密码,但手册中没有提到解密它的方法,限制了8字节的原始数据大小。

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

有什么好办法或其他选择吗???提前谢谢。

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

普通的旧DES是一种过时的算法。你无法将它与AES128进行真正有效的比较;这就像抱怨SHA256哈希比MD5哈希大——是的,但只有其中一个可能会让攻击者慢一段时间。即使在1999年,DES也被广泛认为是弱的,永远不应该用于新的应用程序。请勿使用。

我认为寻求一种"提供尽可能小的数据大小"的加密方法不是一个好主意,因为使用DES加密数据基本上是浪费时间。为什么不使用ROT13(凯撒密码)?"加密"的结果与输入的大小相同,遗憾的是,3岁的孩子可能会破坏加密。

地下室是类似的年份。旧的UNIX密码散列算法是。。。老年人并且完全不适合任何新的应用。哈希至少应该是SHA256。

地穴是单向散列

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

处理大小

使用一个像样的加密函数,并随着大小的增加而生活。bfaes128是你可以合理使用的最弱的。

就我个人而言,我更喜欢在应用程序中进行加密/解密,而不是在数据库中。如果在数据库中完成,则密钥可以通过pg_stat_statements显示,通过log_statement或错误等在日志中显示。最好密钥永远不要与存储的数据位于同一位置。

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

很难提供更多的建议,因为你还没有真正解释你正在加密什么,为什么,你的要求是什么,威胁是什么,等等。

密码

如果你在存储密码,你可能做错了。

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

    • 互联网的OAuth或OpenID

    • 用于intranet 的SSPI、Kerberos/GSSAPI、Active Directory、LDAP绑定、SASL、HTTP DIGEST等

  • 如果您真的必须自己进行身份验证,请在密码中添加salt并对结果进行散列。储存土豆泥和盐。当您必须比较密码时,将用户的新明文与您用于存储哈希的salt进行salt处理,将新密码与salt进行哈希处理,并查看哈希是否与您存储的内容相同。如果是,他们给出了正确的密码。

  • 几乎可以肯定,您不需要恢复明文密码。请改为执行安全密码重置。如果你真的,真的必须,使用一种相当安全的算法,比如aes来加密它们,并仔细考虑密钥存储和管理。请参阅SO上关于使用pgcrypto进行密钥存储/管理的其他帖子。

另请参阅:

  • 存储/检索PGP私钥和密码短语的安全方法

根据postgresql的构建方式,它可能在pgcrypto模块中支持DES。这取决于Postgres是否配置了OpenSSL支持,因为它依赖OpenSSL来执行DES(而使用其他更现代的算法,它自己实现它们)。

PGCrypto算法

如果包含openssl支持,并且指定DES作为encryptdecrypt的算法,则数据应该与从Oracle获得的数据相同(尽管可能需要指定填充选项)。

正如Craig所说,DES算法很弱,它弱的原因之一是输出密文太小。

相关内容

  • 没有找到相关文章

最新更新