密文形式保存密码

密文形式保存密码

绝大部分系统都会有用户注册和登录功能,其中密码是非常重要且敏感的信息。这种信息如果以明文形式存储在数据库中时非常不安全的。因此以密文形式存储是任何系统都应该做的最基本的安全措施。

什么是加密

数据加密 的基本过程,就是对原来为 明文 的文件或数据按 某种算法 进行处理,使其成为 不可读 的一段代码,通常称为 “密文”。通过这样的途径,来达到 保护数据 不被 非法人窃取、阅读的目的。
什么是解密
加密 的 逆过程 为 解密,即将该 编码信息 转化为其 原来数据 的过程。

常见的加密算法

哈希算法
哈希算法(Hash Algorithms)也称为散列算法、杂凑算法或数字指纹,是可以将任意长度的消息压缩为一个固定长度的消息的算法。
哈希算法是区块链技术体系的重要组成部分,也是现代密码学领域的重要分支,在身份认证、数字签名等诸多领域有着广泛的应用。
哈希算法可以在极短的时间内,将任意长度的二进制字符串映射为固定长度的二进制字符串,输出值称为哈希值(Hash Value)或者数字摘要(Digital Digest)。
密码学哈希算法的主要特性就是单向性,即在算法上,只能从输入值计算得到输出值,而从输出值计算得到输入值是不可行的。
常用的哈希算法包括MD系列算法和SHA系列算法,其中MD系列算法有MD2、MD4、MD5、RIPEMD算法等,SHA系列算法有SHA1、SHA224、SHA256、SHA384和SHA512等算法。
在哈希算法中,MD5算法和SHA1算法是应用最广泛的,两者的原理相差不大,但MD5算法加密后的输出值的长度为128比特,SHA1算法加密后的输出值的长度为160比特。但是二者现在已被破解,安全性大大的降低。目前SHA256是比较常见的算法,至少目前仍是较为安全的一种算法。
对称加密算法
对称加密算法 是应用较早的加密算法,又称为 共享密钥加密算法。在 对称加密算法 中,使用的密钥只有一个,发送 和 接收 双方都使用这个密钥对数据进行 加密 和 解密。这就要求加密和解密方事先都必须知道加密的密钥。
在这里插入图片描述

  1. 数据加密过程:在对称加密算法中,数据发送方 将 明文 (原始数据) 和 加密密钥 一起经过特殊 加密处理,生成复杂的 加密密文 进行发送。
  2. 数据解密过程:数据接收方 收到密文后,若想读取原数据,则需要使用 加密使用的密钥 及相同算法的 逆算法 对加密的密文进行解密,才能使其恢复成 可读明文。
    AES、DES、3DES 都是 对称 的 块加密算法,加解密 的过程是 可逆的。常用的有 AES128、AES192、AES256。
    非对称加密算法
    非对称加密算法,又称为 公开密钥加密算法。它需要两个密钥,一个称为 公开密钥 (public key),即 公钥,另一个称为 私有密钥 (private key),即 私钥。
    因为 加密 和 解密 使用的是两个不同的密钥,所以这种算法称为 非对称加密算法。在这里插入图片描述

1.如果使用 公钥 对数据 进行加密,只有用对应的 私钥 才能 进行解密。
2. 如果使用 私钥 对数据 进行加密,只有用对应的 公钥 才能 进行解密。
RSA 加密算法是目前最有影响力的 公钥加密算法,并且被普遍认为是目前 最优秀的公钥方案 之一。RSA 是第一个能同时用于 加密 和 数字签名 的算法,它能够 抵抗 到目前为止已知的 所有密码攻击,已被 ISO 推荐为公钥数据加密标准。
ECC 也是一种 非对称加密算法,主要优势是在某些情况下,它比其他的方法使用 更小的密钥,比如 RSA 加密算法,提供 相当的或更高等级 的安全级别。不过一个缺点是 加密和解密操作 的实现比其他机制 时间长 (相比 RSA 算法,该算法对 CPU 消耗严重)。

在Spring Boot中使用Hash加密算法

引入Apache提供的Hash加密算法工具包:

<dependency>
  <groupId>commons-codec</groupId>
  <artifactId>commons-codec</artifactId>
  <version>1.15</version>
</dependency>

使用工具类进行加密:

String password = "lovo";
// MD5加密
DigestUtils.md5Hex(password)
// SHA256加密
DigestUtils.sha256Hex(password)
已标记关键词 清除标记
相关推荐
如今,很多人有许多帐号和密码。比如证券帐号、银行账户(很多人还不止一个)、网上注册的帐号(如支付宝等)、电脑登录的用户名及密码等等。 面对如此之多的帐号和密码,如何记忆,如何管理,是一个难题。 下面谈谈生活中遇到的某些人的做法,这些做法都是欠妥的,不安全的: 一、不管什么帐号,都用相同的密码。显然这很不安全,虽然好记。至于为什么不安全,大家想一想就会明白。 二、将所有的帐号密码都写在纸上。显然这张纸很重要了。这么重要的东西怎么保管是一个难题。放在席子底下?锁进保险柜?都不是好办法。就算进了保险柜,难道就安全了吗?保险柜是从哪里来的?是人从商店搬回来的。既然可以搬回来,那么也可以搬走。小偷直接把保险柜搬走,你怎么办? 三、用软件记录,比如Word或者Execl,采用密码加密。可是你是否知道,这个密码是很容易破译的。为什么呢?本博来讲解一下密码加密的原理。凡是用密码加密的文件在打开(读取)文件内容的时候,是经过这样一个过程的——“如果X和Y相等,那么就打开”——这里的X是你输入的密码,Y是存入文件的密码。问题就来了,这个事先保存好的密码是存放在一个固定的位置上的。要不然网上怎么还有这样一类软件——专门查看密码的软件? 再说,对于金融类的帐号,密码应该经常更换,否则也容易出问题。如果有几十个经常更换的密码,你怎么记得住? 该软件将你的帐号信息以密文形式记录下来。 可以为每个人定制一个单独的个人版本,相当于一把专用的钥匙。互相之间不通用。 由于上传文件大小的限制,这里只上传了执行文件,需要VC2008的支持。或者去http://www.rayfile.com/files/9b349273-b1d4-11df-b695-0015c55db73d/下载安装版本,先看看效果。
简介 笔者当初为了学习JAVA,收集了很多经典源码,源码难易程度分为初级、中级、高级等,详情看源码列表,需要的可以直接下载! 这些源码反映了那时那景笔者对未来的盲目,对代码的热情、执着,对IT的憧憬、向往!此时此景,笔者只专注Android、Iphone等移动平台开发,看着这些源码心中有万分感慨,写此文章纪念那时那景! Java 源码包 Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除,从账户中取出amt,如果amt>账户余额抛出异常,一个实体Bean可以表示不同的数据实例,我们应该通过主键来判断删除哪个数据实例…… ejbCreate函数用于初始化一个EJB实例 5个目标文件,演示Address EJB的实现 ,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口函数得到远程接口的引用,用远程接口的引用访问EJB。 EJB中JNDI的使用源码例子 1个目标文件,JNDI的使用例子,有源代码,可以下载参考,JNDI的使用,初始化Context,它是连接JNDI树的起始点,查找你要的对象,打印找到的对象,关闭Context…… ftp文件传输 2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户可以在终端上直接地使用它,但是它的主要作用是供程序使用的。本规范尝试满足大型主机、微型主机、个人工作站、和TACs 的不同需求。例如,容易实现协议的设计。 Java EJB中有、无状态SessionBean的两个例子 两个例子,无状态SessionBean可会话Bean必须实现SessionBean,获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,计算利息等;在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天通信演示代码 2个目标文件,一个服务器,一个客户端。 Java Telnet客户端实例源码 一个目标文件,演示Socket的使用。 Java 组播组中发送和接受数据实例 3个目标文件。 Java读写文本文件的示例代码 1个目标文件。 java俄罗斯方块 一个目标文件。 Java非对称加密源码实例 1个目标文件 摘要:Java源码,算法相关,非对称加密   Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。   设定字符串为“张三,你好,我是李四”   产生张三的密钥对(keyPairZhang)   张三生成公钥(publicKeyZhang)并发送给李四,这里发送的是公钥的数组字节   通过网络或磁盘等方式,把公钥编码传送给李四,李四接收到张三编码后的公钥,将其解码,李四用张三的公钥加密信息,并发送给李四,张三用自己的私钥解密从李四处收到的信息…… Java利用DES私钥对称加密代码实例 同上 java聊天室 2个目标文件,简单。 java模拟掷骰子2个 1个目标文件,输出演示。 java凭图游戏 一个目标文件,简单。 java求一个整数的因子 如题。 Java生成密钥的实例 1个目标文件 摘要:Java源码,算法相关,密钥   Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥,通常应对私钥加密后再保存、如何从文件中得到公钥编码的字节数组、如何从字节数组解码公钥。 Java数据压缩与传输实例 1个目标文件 摘要:Java源码,文件操作,数据压缩,文件传输   Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页