Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Spring之密码加密

Spring之密码加密

作者头像
爱撒谎的男孩
发布于 2019-12-31 07:04:24
发布于 2019-12-31 07:04:24
1.3K00
代码可运行
举报
文章被收录于专栏:码猿技术专栏码猿技术专栏
运行总次数:0
代码可运行

文章目录

  1. 1. 密码加密
    1. 1.1. 消息摘要(数据的指纹)
      1. 1.1.1. 定义
      2. 1.1.2. 作用
      3. 1.1.3. 特性
      4. 1.1.4. 特定的算法
      5. 1.1.5. 实现步骤
        1. 1.1.5.1. 添加依赖jar包
      6. 1.1.6. 测试MD5Hex
    2. 1.2. 密码加密
      1. 1.2.1. 明文
      2. 1.2.2. 密文
    3. 1.3. 实例
      1. 1.3.1. 密码的安全性处理
        1. 1.3.1.1. 实现

密码加密

消息摘要(数据的指纹)

定义

  • 对不固定的消息(字符串,一段文本,一个文件),通过一种特定的算法,得到一个固定长度的文本,固定长度的文本叫做消息摘要
  • 比如我是程序员经过特定的算法之后,得到了消息摘要为:adaf02515dfds7885csdfcdsc

作用

  • 数据完整性的检验技术,我们将文本转换为消息摘要,然后比较消息摘要的值是否相等,如果相等那么表示两种文本相同

特性

  • 不可逆的,不能从消息摘要再得到原来的文本

特定的算法

  1. MD5
  2. SHA

实现步骤

添加依赖jar包
  • commons-codec
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<dependency>
    <groupId>commons-codec</groupId>
    <artifactId>commons-codec</artifactId>
    <version>1.10</version>
</dependency>

测试MD5Hex

  • 得到的是32位的16进制的字符串
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Test
	public void test1(){
		String str1="你们好,未来的程序员!";
		String strMessageString=DigestUtils.md5Hex(str1);
		System.out.println(strMessageString);
	}
	
//读取文件
	@Test
	public void test2() throws IOException{
		InputStream inputStream=new FileInputStream(new File("/home/chenjiabing/Documents/Blog/AOP.md"));
		String message=DigestUtils.md5Hex(inputStream);
		System.out.println(message);
	}

密码加密

  • 避免在数据库中明文保存密码,通过消息摘要技术对密码进行加密

明文

  • 没有加密的文字(字符串),能看懂的文字

密文

  • 经过加密后的文字(字符串),看不出来明文的意思

### 加盐处理 salt

  • 为了提高密码的安全性
  • 就是在用户的密码之后随便添加一个字符串,然后连接在一起生成摘要,那么即使获取摘要,也不会被破解
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Test
public void test3(){
	String str1="123456";
	String salt="这个是加盐处理";  //需要加盐,随便定义一个字符串
	String message=DigestUtils.md5Hex(str1+salt);  //获取加盐之后的消息摘要
	System.out.println(message);
}

实例

密码的安全性处理

  • 涉及到密码: 登录,注册,修改密码
实现
  • 创建一个MD5Password工具类,用于加密密码
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * 密码加密的类
 * @author chenjiabing
 */
public class MD5Password {
	private final static String SALT="加油,骚年!";  //加盐处理
	
	/**
	 * 获取加密之后的密码
	 * @param password 用户输入的密码
	 * @return  加密之后的密码
	 */
	public static  String getMd5Password(String password){
		return DigestUtils.md5Hex(password+SALT);  //使用了加盐处理
	}
}
  • 在注册的时候对输入的密码进行加密存储到数据库中
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
	 * 注册
	 * 1. 调用selectUserByUserName(User user)方法判断用户名是否存在,返回对象u
	 * 2. 判断u是否为null,
	 * 3. 如果为null,调用insertUser(user)方法添加
	 * 4. 如果不为null,抛出异常提示controller用户名存在(UserNameAlreadyExistException)
	 */
	public void register(User user) throws UserNameAlreadyExistException {
		User u=userMapper.selectUserByUserName(user.getUsername());  //调用usermapper中的方法
		if (u!=null) {  //如果u不为null,表示用户名已经存在与数据库中,不可以再次注册了,因此抛出异常
			throw new UserNameAlreadyExistException("用户名已经存在,请重新输入!!!");
		}else {   //如果u==null,表示用户名不存在,可以添加
			//获取加密之后的密码
			String md5Password=MD5Password.getMd5Password(user.getPassword());
			//将加密之后的密码设置到user中,保存到数据库中
			user.setPassword(md5Password); 
			userMapper.insertUser(user);  //直接调用持久层方法插入数据即可
		}
	}
  • 在登录的时候,将用户输入的密码进行加密获取到加密之后的密码,然后和数据库中的密码比较
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
	 * 登录方法
	 * 1. 通过selectUserByUserName返回user对象
	 * 2.判断user是否为null
	 * 3.如果user=null,抛出UserNotFoundException异常
	 * 4.如果user!=null,那么验证其中的密码是否正确
	 * 5.如果密码不匹配,抛出PassWordNotMatchException异常
	 * 6. 如果密码匹配,那么返回user对象
	 * @throws UserNotFoundException 
	 * @throws PassWordNotMatchException 
	 */
	public User login(String userName, String passWord) throws UserNotFoundException, PassWordNotMatchException {
		
		User user=userMapper.selectUserByUserName(userName);  //根据用户名查询,返回user对象
		if (user==null) {   //user为null,表示用户名不存在
			throw new UserNotFoundException("用户名不存在");
		}else {  //如果用户名存在,验证密码
			
			//获取加密之后的密码,实际是一个消息摘要
			String md5Password=MD5Password.getMd5Password(passWord);
			
			//使用加密之后获取的消息摘要和数据库中对应的密码比较
			if (md5Password.equals(user.getPassword())) {  //如果密码匹配
				return user;   //返回user对象即可
			}else {   //如果密码不相同,那么直接抛出密码不匹配的异常即可
				throw new PassWordNotMatchException("密码不匹配");
			}
		}
	}
  • 在修改中,将旧密码加密后和数据库中的密码比较,并且将新密码加密更新到数据库中
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
	 * 修改密码
	 * 1. 根据id查询用户信息,返回user
	 * 2. 如果user=null,抛出用户不存在的异常
	 * 3. 如果user!=null,比较user中的密码和用户输入的旧密码oldPassword是否相同
	 * 4. 如果密码不相同,抛出密码不匹配的异常
	 * 5. 如果密码相同,表示用户输入的旧密码是正确的,那么更新密码即可 
	 */
	public void updatePassword(Integer id, String oldPassword,
			String newPassword) throws UserNotFoundException, PassWordNotMatchException {
		User user=userMapper.seletUserById(id);  //根据id查询,返回user对象
		if (user==null) {  //如果用户不存在
			throw new UserNotFoundException("当前登录的用户不存在");  //抛出用户不存在的异常
		}else {  //如果当前登录的用户存在
			//获取旧密码的加密之后的密码
			String oldMd5Password=MD5Password.getMd5Password(oldPassword);
			
			//使用加密之后的密码和数据库中的密码比较
			if (!user.getPassword().equals(oldMd5Password)) { //如果返回的user对象中的密码和用户输入的旧密码不匹配
				throw new PassWordNotMatchException("输入的旧密码不匹配");
			}else {  //如果输出的旧密码正确
				User u1=new User();   //创建User对象,封装修改所需的参数
				//获取加密之后的新密码
				String newMd5Password=MD5Password.getMd5Password(newPassword);
				
				u1.setPassword(newMd5Password);  //封装新密码,其中是加密之后的密码
				u1.setId(id);  //封装id
				userMapper.update(u1);  //调用修改的方法
			}
		}	
	}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-05-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
区块链技术产生的比特币如何找回
主链侧链开发数字货币交易所白皮书区块链浏览器跨境支付场内场外宠物挖矿游戏基金会牌照 181-4069-6008 微信电话同号
用户2357564
2018/07/21
1.1K0
区块链技术产生的比特币如何找回
比特币是什么?比特币从何而来?
IFTNews:此文的目的是汇总比特币基本信息。最近我被问到很多关于密码空间的问题:你如何使用比特币?我如何购买比特币? WTF是我听过的比特币吗?加密吧? 如果你是个交易者,请忽略。如果你是投资者,或者只是想弄明白比特币的意义,那就继续阅读吧! 在考虑我关注比特币投资的基础知识时,我也认为在这里提到加密货币非常不稳定。市场规模很小,日间交易者全押。对于长期投资者来说,这种波动应该不重要。相反,它应该被拥抱。我们专注于每个月,每周甚至每一天都投入少量资金。因此,波动性是一件好事,它提供了以更低的价格更频
企鹅号小编
2018/01/24
2.1K0
比特币是什么?比特币从何而来?
比特币存储与资产安全
网贷谈嘉宾:比太钱包创始人文浩:今天和大家交流的内容是《比特币存储与资产安全》。目前,越来越多的人将比特币作为资产储藏,抵抗通胀膨胀。不论是企业还是个人,都越发关注比特币资产安全问题。 在过去几年我们遇到多次由于保存不当,导致比特币丢失的遗憾案例。所以了解比特币的基础知识与原理成为必要。只有如此,才能更好更安全的保护我们的资产。 第一个需要了解的基础概念:什么是比特币私钥? 对于比特币用户来讲,保管私钥是最为重要的事情。到底什么是私钥呢?简单来讲:私钥就是个随机数。 以掷骰子为例,每投掷一次,产生的数字
企鹅号小编
2018/01/19
2.2K0
比特币存储与资产安全
比特币冷钱包到底应该怎么做
引言 2015年的羊年新年假期, 中国最大的竞争币交易所之一的比特儿传出冷钱包被盗的新闻, 7170个比特币被黑客瞬间偷走, 损失超过1000万元人民币。大家不禁要问, 比特币都放进冷钱包了还会被偷走, 这比特币还能玩吗?这不靠谱啊! 比特儿交易所老总在之后的媒体采访中几次强调, “密码被破解”, 冷钱包和密码有很大关系吗?还是这位老总根本不知道何为冷钱包。引用Okcoin创始人徐明星的一句话来说明一下:“(比特币冷钱包的)关键要做到永不触网。” 下面笔者就一步一步的图文并用的给大家讲一讲最基本的冷钱包方案, 如何创建一个永不触网的冷钱包, 并且离线的创建一笔比特币交易。
程序新视界
2022/05/06
2.6K0
比特币冷钱包到底应该怎么做
浅谈比特币
最近比特币以及各种数字货币火的不行,区块链这个概念也三天两头霸占各种科技头条。以前虽然经常能听到「比特币」这个字眼,可完全没有足够的诱惑力吸引到我, 直到最近,因为曝光度实在太大,频繁出现在我的电脑和
用户1608022
2018/04/11
1.2K1
浅谈比特币
你的比特币安全吗?
比特币(BTC)是一种数字货币,能够快速给世界上的任何人。它依据特定算法、通过大量的计算而产生,因此比特币的发行不受任何政府、银行、组织及个人的操纵。 比特币的发展 BTC最初由Satoshi Nakamot(假名)设计,并获得MIT许可证。这种货币的优点包括低廉地海外汇款费用、比任何银行都快的交易速度、由于不受物理窃取数量约束而无法提交退款或者信用欺诈、没有通胀风险以及如果有能力你可以自己开采比特币。 比特币经历了一个巨大的成交量而从2013年的150亿美元增长57%至2014年的230亿美元。活跃的
FB客服
2018/02/06
1.1K0
你的比特币安全吗?
黑客又惹祸,致比特币下跌近2000美元
据BtcTrade国际站的数据,截止22日上午10:30,比特币今日价格现报125128.6CNY,较前一日有大幅下跌,同时也创下本周单日最大下跌幅度。而造成本轮下跌的原因,与最近一些早期比特币投资人出清手中持币有关。此外,有传闻称乌克兰交易所Liqui被黑客攻击,市场出现恐慌,各大交易平台均出现下跌情况。不仅如此,除比特币外的其他虚拟货币也纷纷受影响,均有所下跌。 黑客一直是数字货币世界挥之不去的噩梦。此前,韩国数字货币交易所Youbite宣布在19日下午4时左右,交易平台受到黑客入侵,造成的损失
企鹅号小编
2018/01/31
6010
黑客又惹祸,致比特币下跌近2000美元
比特币离你很近-比特币地址及生成
本文主要介绍了比特币地址及生成方法,包括随机生成64位16进制数初始私钥、在初始私钥基础上生成WIF非压缩私钥、在初始私钥基础上进行椭圆加密、在椭圆加密基础上生成公钥地址等步骤。同时,本文还提供了相应的代码示例,以帮助读者更好地理解比特币地址和生成过程。
企鹅号小编
2017/12/27
1.4K0
比特币离你很近-比特币地址及生成
区块链消费者们成为黑客攻击目标 比特币能否被找回存疑
文/泓和 2017年的区块链行业并不缺乏全新的技术术语,区块链消费者们也不免成为了黑客与罪犯们的攻击目标。不论是钱包黑客还是有欺诈性质的ICO,或者是软件代码漏洞,这些可能会使投资者损失数百万美元。 目前为止,这些罪犯们还没有被抓获,甚至不能被确认,而且这些资金可能基本无法被找回。 1. CoinDash ICO黑客 今年夏天,CoinDash推出了ICO,但其以太坊地址随后被泄露,最终不得不终止使用。在黑客更改地址之前,这家初创企业已经筹得730万美元。尽管该公司随后表示在发布公告之后再向以太
企鹅号小编
2018/01/12
7800
区块链消费者们成为黑客攻击目标 比特币能否被找回存疑
比特币入门教程
比特币(bitcoin)诞生于2008年的一篇论文。 一个署名为中本聪的人,提出了革命性的构想:让我们创造一种不受政府或其他任何人控制的货币!这个想法堪称疯狂:一串数字,背后没有任何资产支持,也没有任
wangxl
2018/03/09
8861
比特币入门教程
黑客攻击币安API完全调查:我们发现了比价值96比特币的SYS更有意思的信息
在 7 月 4 号的币安 API 被攻击本该是一件大事,当天,有 11 个名为 SYS 的 Token 在币安交易所内以 450 万人民币(96 个比特币)的价格被成交,相对其之前价格瞬间暴涨了 320 万倍。但这件事却因为当时最重磅的八卦「李笑来录音门」所被人忽视了。
区块链大本营
2018/08/03
8670
黑客攻击币安API完全调查:我们发现了比价值96比特币的SYS更有意思的信息
一个比特币交易流程是如何完成的 原
作为加密货币用户,你需要熟悉交易雏形——为了你对这种不断发展的创新有信心,以及作为理解新兴多签名交易和合约的基础,这两者都将在本系列的后期进行探讨。这不是纯技术文章,解释将集中在你需要了解的标准比特币交易——我们通常做的支出交易——并且我们将掩盖你可以安全忽略的内容。
笔阁
2018/11/09
3.5K0
比特币都有十年了,可能你至今还不知道怎样使用它才安全!
十年前,比特币刚刚出现时,中本聪(Satoshi Nakamoto)着重强调的是它作为数字化的“电子现金”的货币潜力。然而,一经面世,比特币便成为互联网地下世界的宠儿。匿名、加密等特征甚至还让它直接跟网络非法交易对等起来,尽管比特币并非完全匿名。
区块链大本营
2018/12/05
1.1K0
区块链学习笔记 | 比特币中用到的密码学原理
区块链这个名词,大家都不陌生,那么区块链的本质究竟是什么?有人说区块链是下一代的价值互联网;也有人说它是世界上最慢的数据库。的确,如果把它当数据库用的话是非常的慢,而且仅仅只能实现数据库中的一小部分功能。
Python进击者
2019/08/12
1.6K2
糖果没吃到,结果把比特币给弄丢了
本文来自「 路可比特 」作者:苏耀勇 本文由币乎(bihu.com)内容支持计划奖励 “币圈骗局”已是见多不怪的事情。常言道,哪里有诱惑,哪里就隐藏陷阱。近期路可君的一位朋友就差点掉进骗子设好的陷阱里,还好他机智过人,才得以确保自己数字财产的安全。以下是这位苏朋友所经历的整个过程: 2017年8月1日的比特币首次硬分叉,产生了比特币现金(BCH);在2017年10月25日比特币再次硬分叉,产生了比特币黄金(BTG)。这两个分叉币都在多个交易所上市交易,尤其是比特现金曾经一度有将比特币取而代之的想法。今天
企鹅号小编
2018/02/26
1.1K0
糖果没吃到,结果把比特币给弄丢了
带你了解“比特币黄金”和SegWit2x分叉
10月25日,比特币黄金从比特币中分离出来创造出一个基于ASIC挖矿的数字货币。几周之后,比特币公司中一个重要的集团想要根据 “纽约协议” 定义的SegWit2x方案来进行硬分叉,也许将要导致另一个新币的诞生。 如果这些都实现,在这篇文章发表后大约一个月内,比特币就会有三个不同的区块链和三种不同类型的币。一个区块链会符合现有的比特币协议;为了方便文章叙述,这个币会被称为“BTC”。第二个区块链会符合“比特币黄金协议”,这篇文章中,这个币会被称为“BTG”。第三个区块链会符合SegWit2x协议;这个币种将
区块链大本营
2018/05/10
8670
区块链比特币入门详解
比特币和区块链技术的发展非常迅速,即使那些没有听说过加密货币或了解其工作的人也在寻求投资和探索这个领域。区块链技术和加密货币今天已经成为人们开始执行标准交易的平行平台。现在,如果一个新系统正在慢慢取代现有系统,那么目前的系统肯定存在一些问题。我们将通过了解当前银行系统的问题引出当前的比特币和区块链的概念。
若与
2018/05/23
1.8K0
区块链比特币入门详解
黑客真的会毁了比特币吗?
不到一年时间里,从不到1万元涨至突破10万元,比特币以其快速的资产价格涨幅,由一个“圈子化”的数字资产,逐渐成为全世界市场所关注的焦点。 2017年年初,比特币仍处8000元左右价格,但当时已屡破历史新高,国内交易规模的扩大也引来监管层对大型交易平台启动的现场检查。但监管的关注未能阻止比特币继续上涨——今年6月初,比特币突破2万元大关。在期货合约酝酿、共同基金发起等利好推动下,比特币价格最终在合约上线CME前夕突破2万美元,折合人民币13万元以上。 在这快速暴涨的背后,虚拟货币的安全问题也成为人们关注的
企鹅号小编
2018/01/18
1.1K0
黑客真的会毁了比特币吗?
比特币核心技术解读
在上一篇文章《区块链基础知识与关键技术》里对区块链的基础知识和关键技术进行了梳理,而比特币是区块链最典型的应用,本文将对比特币核心技术进行解读,如有错漏,欢迎交流指正。
pseudoyu
2023/04/11
1.1K0
比特币核心技术解读
10大PHP比特币开源项目
如果你是一个Phper,如果你希望学习区块链,那么本文列出的 10个开源的Php比特币项目,将有助于你了解在自己的应用中 如何加入对比特币的支持。
用户1408045
2019/03/12
1.9K0
10大PHP比特币开源项目
相关推荐
区块链技术产生的比特币如何找回
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验