我有Oracle数据库移动到新的PostgreSQL服务器。
有些表有场sesitive和这些都通过DBMS_OBFUSCATION_TOOLKIT.DESENCRYPT / DESDECRYPT encryted。
问题就在这里。 PostgreSQL的加密的数据尺寸(BYTEA型)的大小应与Oracle的相同。
我试图把它与花费的时间比原始数据大三倍AES(加密/解密)来完成。(甲骨文需要16字节与DES算法,PostgreSQL的需要33byte与AES和原始数据为13byte的。)
我试过的PostgreSQL地穴也不过手册没有求佛解密回限定原始数据大小的8字节的方式。
现在,我真的需要这需要小encryted数据大小尽可能提供解密方法也加密方法。
有没有好的方法或其他选项我吗? 提前致谢。
地穴和DES都是老cyphers,不应该被使用
普通的旧DES是一种过时的算法。 你不能真正有效地把它比作AES128; 这就像抱怨一个SHA256哈希比MD5哈希更大 - 是的,它是,但其中只有一个可能会减缓攻击者一会儿。 DES被广泛认为是弱,即使在1999年和永远不应该在新的应用中使用。 不要使用它。
我不认为这是一个好主意,寻求一种加密方法“提供了数据量最小的可能” - 因为它基本上是时间使用DES加密数据的浪费。 为什么不使用ROT13(凯撒CYPHER)? 在“加密”的结果是大小作为输入,可惜加密可以使用一个3岁被打破相同。
隐窝是一个类似的年份。 旧的UNIX地穴散列算法是... ...老年人和完全不适合任何新的应用程序。 哈希应至少进行SHA256,真的。
地穴是一个单向散列
至于不能够弄清楚如何解密加密后的数据: 地下室是不是一个加密算法,它是一个加密散列函数或“单向散列”。 一种单向散列算法是适合用于验证数据没有被修改,比较存储盐腌哈希密码验证,在使用质询-响应认证 ,等等。你不能解密加密后的数据。
与大小处理
使用一个体面的加密功能和生活与尺寸的增加。 bf
或aes128
是你可以合理利用最弱。
我个人更喜欢做我的加密/解密的应用程序,而不是在数据库中。 如果它在DB做的按键可以通过显示pg_stat_statements
,通过日志log_statement
或错误等更好,关键永远不会在同一个地方存储的数据都没有。
大多数编程语言都可以使用好的加密例程。
很难提供任何更多的意见,你有没有真正解释你在加密什么,为什么,你的要求是什么,威胁(或多个),等等。
密码?
如果你存储的密码,你可能就错了。
如果可能的话,让别人做认证:
如果你真的必须自己做身份验证,盐添加到密码和散列结果。 存储哈希和盐。 当你必须比较的密码,盐从你用于存储的哈希相同的盐用户的新的明文,哈希新密码+盐,看看如果哈希是一样的,你什么存储。 如果是,他们给了正确的密码。
你几乎肯定不需要恢复明文密码。 实现一个安全的密码重置代替。 如果你真的必须使用一个体面的安全算法,如AES加密它们,仔细想想密钥存储和管理。 查看与pgcrypto SO大约密钥存储/管理的其他职位。
也可以看看:
根据你的PostgreSQL是如何构建的,它可能有pgcrypto模块支持DES。 这取决于是否Postgres的与OpenSSL的支持配置,因为它依赖于OpenSSL的做DES(同时与其他更现代的算法,它实现了他们自己)。
PGCrypto算法
如果OpenSSL的支持被列入,并指定作为DES算法来encrypt
和decrypt
,数据应该是一样的,你从甲骨文获得(尽管你可能需要指定填充选项)。
克雷格说,虽然,DES算法是软弱的原因之一是弱是因为输出密文是如此之小。