我正在使用PBEWithMD5AndDES算法来加密密码。我需要在db列中存储加密的密码。基于密码的长度,我必须确定db列的长度。我想知道使用上述算法可以加密的密码的最大长度是多少。
答案 0 :(得分:2)
如果这是用于访问系统中某些东西的密码,则不应完全将其存储为加密的,而应存储不可逆的慢速哈希,有时伪装成PBKDF(基于密码的密钥派生功能)。这提供了更好的安全性,这对于SO而言是毫无意义的,但是在security.SX上已经进行了数千次详尽的讨论,而在crypto.SX上讨论的程度较小。有关规范的链接和许多链接,请参见https://security.stackexchange.com/questions/211/how-to-securely-hash-passwords。
如果您确实需要存储加密,则PBEwithMD5andDES是不安全的。熟练的攻击者最多可以在数小时内(可能数秒内)轻松解密使用此算法加密的任何存储值,因此几乎不值得进行加密。
那些人回答了您问的唯一一个问题:使用此算法可以不安全加密的数据大小没有内在限制。与所有Java Cipher
实例一样,它使用init, update, doFinal
结构,尽管Java语言将一次调用传递或返回的byte[]
参数的大小限制为小于2 ^ 31(大约2100,000,000)字节,您可以拨打任意数量的电话。 (对于安全密码,为了保持安全性,对数据大小有一些限制,取决于算法和模式,但是由于此密码不安全,因此不会因超出数据大小而丢失任何内容可能会降低安全性。)
处理更多数据将花费越来越多的时间,因为此密码使用CBC模式,该模式无法并行化或通过加密进行流水线处理。我没有测量过,无论如何它会因您的硬件和Java版本而有所不同,但是例如,如果您想加密1,000,000,000,000,000,000字节,则可能需要花费300,000年的时间。您的计算机使用寿命可能不会那么长。
OTOH,因为您要将结果存储在数据库中,所以几乎肯定会有一些限制。即使没有架构上的限制,也没有有效的限制,每个数据库最终都会受到它可以使用的磁盘大小或等效存储的限制,并且数据中心中所有存储的总和({不是全部){{3} }。