java - java中如何实现加密和解密
问题描述
你好我是java新手,我想开发一个简单的登录应用程序,我必须在db中存储值。我已经阅读了许多有关加密和解密的示例,但我无法理解(可能是因为复杂的英文单词)什么是算法、密钥、填充以及为什么我们必须使用 getBytes()。你能用简单的英语举例详细解释吗?哪种算法,填充对加密和解密最有用。密钥是预定义的固定词还是我们可以设置自己的密钥。代码将非常有用。
解决方案
我是这个主题的新手,所以我只建议对密码进行散列和加盐处理,我无法提供更多的见解,但我发现这个视频在这个主题上非常广泛和有趣,iirc 他甚至展示了一些代码示例和例如,我建议从那里开始,然后带着疑问回来!
事情的一般要点是获取原始密码字符串,并用它生成一个随机字符串,将两者连接起来,然后对它们的组合形式进行散列并存储两者的散列形式和随机字符串,然后,当那个人要去登录,您将相同的盐应用于插入的密码,并将其与数据库中的散列形式进行比较。
这比标准散列具有优势,因为每个用户的随机字符串是唯一的,这意味着所有散列,即使来自相同的密码,也会不同,而在正常散列中,你会为相同的密码获得相同的散列,因此,它将是如果许多用户具有相同的密码,则更容易破解一些,在这种情况下不能这样做,因为每个哈希键都是不同的。
所以请记住,生成随机字符串,连接它,散列连接的字符串,将散列和随机字符串存储到数据库中,并在登录时进行比较。
推荐阅读
- javascript - 使用数组设置引导选择值但保留数组顺序(而不是按字母顺序排序)
- javascript - 如何使用preloadjs上传图片?
- docker - Docker:多阶段构建导致多个图像
- python - BeautifulSoup Pretify 列表到 Pandas DF
- python - 如何使用 google colab 对 google 驱动器中的文件使用 read sql 查询?我已经尝试了以下文件,但没有成功
- azure - 首次登录时不提示更改密码
- javascript - 使用Javascript从单元格表中获取第二个子值
- azure - PS:从 LB 池中删除 Azure NIC
- c - MIPS:在函数调用和返回中将 C 代码转换为 MIPS 问题
- android - 要使用的数据类型而不是 MutableLiveData?