繁体   English   中英

java中如何实现加密和解密

[英]How to achieve encyption and decryption in java

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

我在这个主题上有点新手,所以我只推荐散列和加盐密码,我不能提供更多的见解,但我发现这个视频我发现它在这个主题上非常广泛和有趣,而且 iirc 他甚至展示了一些代码示例和例如,我建议从那里开始,然后带着疑问回来!

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

这比标准散列具有优势,因为随机字符串对于每个用户都是唯一的,这意味着所有散列,即使来自相同的密码,也会不同,而在正常散列中,您将获得相同密码的相同散列,因此,它将是如果许多用户具有相同的密码,则更容易破解一些,在这种情况下无法完成,因为每个哈希键都不同。

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

我实际上很惊讶,有人在做错事之前问过。

但是,对于一个单一的答案,您所问的问题非常广泛。 我建议至少参加一些密码学的基础课程(我会推荐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

  • AES - 密码(加密算法)
  • CBC - 操作模式
  • PKCS5Padding -填充以使数据适合所需的块长度

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM