messagedigest 图片加密_MessageDigest 加密和解密2

-------------------解密---------------------------

package com.drawthink.platform.util;

import java.io.UnsupportedEncodingException;

import java.security.MessageDigest;

import java.security.NoSuchAlgorithmException;

import java.security.SecureRandom;

import java.util.Arrays;public classMyMD5Util {private static final String HEX_NUMS_STR="0123456789ABCDEF";private static final Integer SALT_LENGTH = 12;/**

* 将16进制字符串转换成字节数组

* @param hex

* @return*/

public static byte[] hexStringToByte(String hex) {int len = (hex.length() / 2);byte[] result = new byte[len];char[] hexChars =hex.toCharArray();for (int i = 0; i < len; i++) {int pos = i * 2;

result[i]= (byte) (HEX_NUMS_STR.indexOf(hexChars[pos]) << 4

| HEX_NUMS_STR.indexOf(hexChars[pos + 1]));

}returnresult;

}/**

* 将指定byte数组转换成16进制字符串

* @param b

* @return*/

public static String byteToHexString(byte[] b) {

StringBuffer hexString= newStringBuffer();for (int i = 0; i < b.length; i++) {

String hex= Integer.toHexString(b[i] & 0xFF);if (hex.length() == 1) {

hex= '0' +hex;

}

hexString.append(hex.toUpperCase());

}returnhexString.toString();

}/**

* 验证口令是否合法

* @param password

* @param passwordInDb

* @return

* @throws NoSuchAlgorithmException

* @throws UnsupportedEncodingException*/

public staticboolean validPassword(String password, String passwordInDb)throws NoSuchAlgorithmException, UnsupportedEncodingException {//将16进制字符串格式口令转换成字节数组

byte[] pwdInDb =hexStringToByte(passwordInDb);//声明盐变量

byte[] salt = new byte[SALT_LENGTH];//将盐从数据库中保存的口令字节数组中提取出来

System.arraycopy(pwdInDb, 0, salt, 0, SALT_LENGTH);//创建消息摘要对象

MessageDigest md = MessageDigest.getInstance("MD5");//将盐数据传入消息摘要对象

md.update(salt);//将口令的数据传给消息摘要对象

md.update(password.getBytes("UTF-8"));//生成输入口令的消息摘要

byte[] digest =md.digest();//声明一个保存数据库中口令消息摘要的变量

byte[] digestInDb = new byte[pwdInDb.length -SALT_LENGTH];//取得数据库中口令的消息摘要

System.arraycopy(pwdInDb, SALT_LENGTH, digestInDb, 0, digestInDb.length);//比较根据输入口令生成的消息摘要和数据库中消息摘要是否相同

if(Arrays.equals(digest, digestInDb)) {//口令正确返回口令匹配消息

return true;

}else{//口令不正确返回口令不匹配消息

return false;

}

}/**

* 获得加密后的16进制形式口令

* @param password

* @return

* @throws NoSuchAlgorithmException

* @throws UnsupportedEncodingException*/

public staticString getEncryptedPwd(String password) throws NoSuchAlgorithmException, UnsupportedEncodingException {//声明加密后的口令数组变量

byte[] pwd = null;//随机数生成器

SecureRandom random = newSecureRandom();//声明盐数组变量

byte[] salt = new byte[SALT_LENGTH];//将随机数放入盐变量中

random.nextBytes(salt);//声明消息摘要对象

MessageDigest md = null;//创建消息摘要

md = MessageDigest.getInstance("MD5");//将盐数据传入消息摘要对象

md.update(salt);//将口令的数据传给消息摘要对象

md.update(password.getBytes("UTF-8"));//获得消息摘要的字节数组

byte[] digest =md.digest();//因为要在口令的字节数组中存放盐,所以加上盐的字节长度

pwd = new byte[digest.length +SALT_LENGTH];//将盐的字节拷贝到生成的加密口令字节数组的前12个字节,以便在验证口令时取出盐

System.arraycopy(salt, 0, pwd, 0, SALT_LENGTH);//将消息摘要拷贝到加密口令字节数组从第13个字节开始的字节

System.arraycopy(digest, 0, pwd, SALT_LENGTH, digest.length);//将字节数组格式加密后的口令转化为16进制字符串格式的口令

returnbyteToHexString(pwd);

}//测试方法

public static voidmain(String[] args) {try{

String password= "5a105e8b9d40e1329780d62ea2265d8a";

boolean encryptedPwd=MyMD5Util.validPassword(password,password);

System.out.println(encryptedPwd);

}catch (NoSuchAlgorithmException |UnsupportedEncodingException e) {//TODO Auto-generated catch block

e.printStackTrace();

}

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/396191.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

34个省市自治区排序_freeCodeCamp的1,000多个学习小组现已完全自治

34个省市自治区排序by Justin Sane贾斯汀桑恩(Justin Sane) freeCodeCamp的1,000多个学习小组现已完全自治 (freeCodeCamp’s 1,000 study groups are now fully autonomous) When the first local freeCodeCamp (fCC) study group popped up, we had no idea that within les…

oracle rac alter日志,ORACLE 11G RAC 增加日志组及增大日志文件

1、查看目前日志组和日志文件情况SQL> select * from v$logfile order by 1;GROUP# STATUS TYPE MEMBER IS_---------- ------- ------- -------------------------------------------------- ---1 ONLINE FRA/st…

RSA加密算法简单分析

预备知识 1&#xff09;RSA是第一个比较完善的公开密钥算法&#xff0c;它既能用于加密&#xff0c;也能用于数字签名。RSA以它的三个发明者Ron Rivest, Adi Shamir, Leonard Adleman的名字首字母命名&#xff0c;这个算法经受住了多年深入的密码分析&#xff0c;虽然密码分析者…

C#字符串变量使用

string由于是引用类型&#xff0c;所以&#xff0c;声明的字符串变量会存储到堆上&#xff0c;而且该变量是不可变的&#xff0c;一旦初始化了该变量&#xff0c;该内存区域中存储的内容将不能更改。在对字符串操作时&#xff0c;是在堆上创建了一个新的字符串变量&#xff0c;…

c语输入单引号_C语言的printf不能用单引号?

多年没用C语言了。近日用R语言编程时因有太多循环&#xff0c;只好用C写个扩展模块&#xff0c;一时竟不知怎么动手了。在多种语言中&#xff0c;单引号和双引号是可以等同使用的。因键入双引号要比单引号多按一SHIFT键&#xff0c;我偏好单引号。在用printf显示字符串&#xf…

css flexbox模型_CSS Flexbox在全国范围内的公路旅行中得到了解释

css flexbox模型by Kevin Kononenko凯文科诺年科(Kevin Kononenko) CSS Flexbox在全国范围内的公路旅行中得到了解释 (CSS Flexbox Explained by Road Tripping Across the Country) 如果您旅行很长&#xff0c;那么您可以了解CSS Flexbox&#xff01; (If you have ever been…

oracle 10g 白皮书,Oracle 10g标准版与企业版

beautiful 于 2007-03-06 00:43:37发表:最后还有一些关于oracle产品的FAQ&#xff1a;1. Oracle数据库软件目前在售的版本号&#xff1f;A&#xff1a;目前在售的是Oracle 9i 和Oracle 10g2. 10g是不是比9i更好&#xff1f;A&#xff1a;一个新版本的软件推出以后&#xff0c;总…

Linux 小笔记

1、查看linux 版本 按ctrlshiftt 快捷键&#xff0c;打开终端&#xff0c;输入sudo uname --m &#xff0c;按下enter 如果显示i686,你安装了32位操作系统 如果显示 x86_64&#xff0c;你安装了64位操作系统 转载于:https://www.cnblogs.com/1995hxt/p/5436683.html

不会发布npm包?进来看看?

前言 npm(Node Package Manager)&#xff0c;一个Node的包管理器&#xff0c;平时我们常用的公共模块&#xff08;插件&#xff09;或者叫做包大多都放在上面&#xff0c;所以接下来要封装的插件&#xff0c;我们就简单称它为npm包&#xff0c;本文从就从这个简单的例子开始&am…

如何让帝国CMS7.2搜索模板支持动态标签调用

帝国cms站内搜索一般不支持动态标签调用&#xff0c;如果要调用如何实现呢&#xff1f;修改两个地方就可以实现了。打开 /e/search/result/index.php 文件&#xff0c;找到&#xff08;文件改了&#xff0c;不会调用也是徒劳&#xff01;看看这个帝国cms搜索关键字调用标签(sho…

access字体变为斜体_Linux折腾记(四):Linux桌面系统字体配置详解

字体显示效果测试文字&#xff1a;复制代码代码如下:这一段是为了测试宋体字的显示效果&#xff0c;包括宋体里面自带的英文字体&#xff0c;“This is english,how does it look like?”。这一行是小字。后面几个字是加粗的宋体。标点符号“&#xff0c;。&#xff1a;&#…

oracle between and monday,oracle——时间

时间数据1. 插入时间数据插入语法命令&#xff1a;insert into floor values (to_date(年-月-日 时:分:秒,YYYY-MM-DD HH24:MI:SS));完整的时间插入insert into floor values (to_date(2010-07-12 09:10:12,YYYY-MM-DD HH24:MI:SS));查询显示&#xff1a;2010-07-12 09:10:12.0…

Nova 组件详解 - 每天5分钟玩转 OpenStack(26)

本节开始&#xff0c;我们将详细讲解 Nova 的各个子服务。 前面架构概览一节知道 Nova 有若干 nova-* 的子服务&#xff0c;下面我们将依次学习最重要的几个。今天先讨论 nova-api 和 nova-conductor。 nova-api Nova-api 是整个 Nova 组件的门户&#xff0c;所有对 Nova 的请…

肯德基圣代中间空心_建造冰淇淋圣代解释CSS位置

肯德基圣代中间空心by Kevin Kononenko凯文科诺年科(Kevin Kononenko) 建造冰淇淋圣代解释CSS位置 (CSS Positioning Explained By Building An Ice Cream Sundae) 如果您之前做过冰淇淋圣代&#xff0c;那么您可以了解CSS的位置。 (If you’ve made an ice cream sundae befo…

00

&#xff08;1&#xff09;设置gcc 把所有gcc版本解压到/home/flinn/tools/目录下&#xff0c;以免切换编译器export PATHPATH/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/flinn/tools/4.4.3/bin &#xff08;2&#xff09;编译&#xff1…

12_04_Linux软件管理之四yum

2019独角兽企业重金招聘Python工程师标准>>> RPM安装&#xff1a; 二进制格式&#xff1a; 源程序--》编译--》二进制格式 有些特性是编译时选定的&#xff0c;如果编译时未选定此特性&#xff0c;将无法使用&#xff1b; rpm包的版本会落后于源码包&#xff0c;甚至…

datastage 函数_DataStage常用函数大全

1/38DataStage常用函数大全DATASTAGE常用函数大全.................................................................................................1一、类型转换函数................................................................................................…

linux 解析elf文件格式,Linux下ELF文件解析

1. windows PE文件与Linux ELF文件概述在windows中可执行文件是pe文件格式&#xff0c;Linux中可执行文件是ELF文件&#xff0c;其文件格式是ELF文件格式&#xff0c;在Linux下的ELF文件除了可执行文件(Excutable File),可重定位目标文件(RellocatableObject File)、共享目标文…

富爸爸穷爸爸害了我_这是我必须告诉爸爸的-在我们的时间用完之前

富爸爸穷爸爸害了我by Bram Bos通过Bram Bos 这是我必须告诉爸爸的-在我们的时间用完之前 (This is what I must tell my dad — before our time runs out) I was a young boy in the 1980s. Like the typical Generation-X kid, I grew up in the days of the home computer…

应用容器公共免费部署平台

从网上信息&#xff0c;发现了一个公共的容器部署平台 openshift.com&#xff0c;可以将我们封装好的docker镜像部署到平台上&#xff0c; 这样就不需要拥有一台云服务器了。对于测试环境非常有用。 首先当然是需要注册。这里全英文 第二&#xff0c;注册之后需要选择你想要的套…