当前位置: 首页 > 面试题库 >

Java密码加密

陶裕
2023-03-14
问题内容

我正在尝试学习如何使用Java进行基于密码的加密。我在网上找到了几个示例,但在Stack
Overflow上还没有(到目前为止)。这些示例对我的解释不大,尤其是在算法选择方面。似乎有很多传递字符串来说明要使用什么算法,但是很少有关于字符串来自何处以及含义的文档。而且似乎不同的算法可能需要KeySpec类的不同实现,所以我不确定哪种算法可以使用我正在查看的PBEKeySpec类。此外,所有示例似乎都有些过时,许多示例要求您获得以前不属于JDK甚至第三方实现的旧加密程序包。

有人可以简单介绍一下我实现加密(字符串数据,字符串密码)和解密(字节[]数据,字符串密码)需要做什么吗?


问题答案:

我会在论坛上提供或接受与安全相关的建议时会保持谨慎态度……具体细节非常复杂,而且通常很快就会过时。

话虽如此,我认为Sun的Java密码体系结构(JCA)参考指南是一个很好的起点。查看随附的代码示例,该示例说明基于密码的加密(PBE)。

顺便说一句,标准JRE仅提供了一些开箱即用的PBE选项(“
PBEWithMD5AndDES”就是其中之一)。要获得更多选择,您将需要“强大的加密包”或某些第三方提供商,例如Bouncy
Castle
。另一种选择是使用JRE中提供的哈希和密码算法来实现自己的PBE。您可以通过SHA-256和AES-128来实现PBE(示例加密/解密方法)。

简而言之,PBE的加密方法可能涉及以下步骤:

  1. 从用户那里获取密码和明文,然后将它们转换为字节数组。
  2. 产生安全的随机盐。
  3. 将盐添加到密码并计算其加密哈希。重复多次。
  4. 使用所得的哈希值作为初始化向量和/或密钥对明文进行加密。
  5. 保存盐和所得密文。


 类似资料:
  • 问题内容: 我想用Java加密和解密密码,然后以加密形式存储到数据库中。如果它是开源的,那就太好了。有什么建议/建议吗? 问题答案: 编辑 :这个答案是旧的。现在 不建议 使用MD5,因为它很容易被破坏。 我想象中的MD5必须足够好?您可以使用MessageDigest实现它。 这里还列出了其他算法。 如果确实需要,这是它的第三方版本: Fast MD5

  • 问题内容: 我已经以加密格式将用户密码存储在数据库中。但是,现在,当用户想要登录并尝试输入其原始密码时,该代码始终会将输入的(原始)密码与数据库中存储的加密版本进行比较,从而导致登录失败。 请告诉我如何比较输入的(原始)密码和存储在数据库中的加密密码。 问题答案: 几乎可以肯定,您应该对密码进行 哈希处理 ,而不是使用可逆加密。您可能还需要 用盐 来做…在这种情况下,正确的步骤是: 查找最初对密码

  • 在FTPS中,密码在尝试通过internet连接服务器时被加密。这就是我所理解的,如果我的理解有任何遗漏,请更正。我的问题是,当我厌倦了模拟它(FTPs和FTP)时,我只是得到一条消息,说SSL已经建立(以及基于隐式和显式调用的端口更改)。 是否有任何其他方式来确认密码是真正加密的,或者我们可以看到密码时,它的普通FTP。下面是我在服务器端看到的日志 启用FTP时的服务器日志- 状态:TLS/SS

  • cmf_password($pw, $authCode = '') 功能 CMF密码加密方法 参数 $pw: string 要加密的原始密码 $authCode: string 加密字符串 返回 string 加密后的密码 例子 echo cmf_password('666666');

  • 我正在使用。我刚刚检查了我的编码类,发现它的字节代码显示了我的加密密码在类中的原样。我真的开始担心我所有数据的安全性。如果有人黑了我的类,那么我的数据会发生什么。为什么java类不将字符串名和值转换为字节码?

  • 问题内容: 我需要访问joomla用户表以从外部php脚本[codeignitor]进行登录检查。 joomla这样存储密码 看起来这不是正常的MD5,所以我无法使用。 创建密码的可能方式是什么? 谢谢。 问题答案: Joomla密码是经过MD5哈希处理的,但是在哈希处理之前,已对密码进行了固定处理。它们被存储在数据库中,因为此盐是长度为32个字符的随机字符串。 因此,要创建一个新的密码哈希, 编