【问题标题】:How to achieve encyption and decryption in javajava中如何实现加解密
【发布时间】:2019-09-01 21:31:41
【问题描述】:

你好,我是 java 新手,我想开发一个简单的登录应用程序,我必须在数据库中存储值。我已经阅读了许多有关加密和解密的示例,但我无法理解(可能是因为复杂的英文单词)什么是算法、密钥、填充以及为什么我们必须使用 getBytes()。你能用简单的英语举例详细解释吗?哪种算法,填充对加密和解密最有用。密钥是预定义的固定词还是我们可以设置自己的密钥。代码会很有用。

【问题讨论】:

  • 你没有。永远不要加密密码。安全地散列它们。这方面有大量文献。
  • 如何安全地散列用户名和密码

标签: java encryption passwords


【解决方案1】:

我是这个主题的新手,所以我只建议对密码进行散列和加盐处理,我无法提供更多的见解,但我发现 this video 在这个主题上非常广泛和有趣,他甚至展示了 iirc一些代码示例和示例,我建议从那里开始,然后带着疑问回来!

事情的一般要点是获取原始密码字符串,并用它生成一个随机字符串,将两者连接起来,然后对它们的组合形式进行散列并存储两者的散列形式和随机字符串,然后,当那个人将要登录,您将相同的盐应用于插入的密码,并将其与数据库中的散列形式进行比较。

这比标准散列具有优势,因为每个用户的随机字符串是唯一的,这意味着所有散列,即使来自相同的密码,也会不同,而在普通散列中,你会为相同的密码获得相同的散列,因此,如果许多用户有相同的密码,那么破解一些会更容易,但在这种情况下不能这样做,因为每个哈希键都是不同的。

所以记住,生成随机字符串,连接它,哈希连接的字符串,将哈希和随机字符串存储到数据库中,并在登录时进行比较。

【讨论】:

  • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review
  • 完成并修复,感谢您告诉我,我没有意识到这一点,但是,公平点
【解决方案2】:

我真的很惊讶,有人在做错事之前问过。

但是,对于单个答案,您要问的内容非常广泛。我建议至少参加一些密码学基础课程(我推荐Coursera。即使你没有完成你的课程,你也会得到很好的基础知识,你应该做什么以及不应该做什么。

我必须在数据库中存储值的简单登录应用程序

如果你的值是指用户密码,那么使用慢速加盐哈希,请阅读https://nakedsecurity.sophos.com/2013/11/20/serious-security-how-to-store-your-users-passwords-safely/

如果你想对一些值进行可逆加密,周围有很多例子,虽然不是所有的都是安全的,

代码会很有用

你可以检查 https://gusto77.wordpress.com/2017/10/30/encryption-reference-project/

什么是算法、密钥、填充以及为什么我们必须使用 getBytes()。

我将从字节开始。加密适用于字节数组。因此,对于任何需要将数据、密钥、密码...转换为字节数组的文本。加密数据也是字节数组。

对于算法,填充,.. 我真的建议你自己多了解一点。

今天有一些密码(算法)被认为是安全的,正确使用它们更为重要。

举个例子,常用的是AES/CBC/PKCS5Padding

.key是预定义的固定词还是我们可以设置自己的key。

密钥是你的秘密值,你需要相同的密钥来解密加密数据,但密钥是你的,最好是随机的

【讨论】:

  • 谢谢#gusto2。如果密钥是随机的,它将如何使用相同的密钥来解密数据
  • @rohan:确实需要使用相同的参数(密码、密钥)来解密数据。我认为,当您创建密钥时,最好是随机且足够长。
猜你喜欢
  • 2018-03-05
  • 2018-11-25
  • 2020-04-20
  • 2019-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-06
相关资源
最近更新 更多