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

messagedigest 图片加密_MessageDigest 加密和解密2——————-解密—————————packagecom.drawthink.platform.util;importjava.io.UnsupportedEncodingException;importjava.security.MessageDigest;importjava.security.NoSuchAlgorithmE…

大家好,又见面了,我是你们的朋友全栈君。

——————-解密—————————

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();

}

}

}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/150209.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 论文写作利器—LaTeX教程(入门篇)(更新中)

    论文写作利器—LaTeX教程(入门篇)(更新中)一、LaTeX简介结合维基百科及LaTeX官网可知:LaTeX(/ˈlɑːtɛx/,常被读作/ˈlɑːtɛk/或/ˈleɪtɛk/)是一种基于TeX的高品质排版系统,由美国计算机科学家莱斯利·兰伯特在20世纪80年代初期开发,非常适用于生成高印刷质量的科技和数学、物理文档,尤其擅长于复杂表格和数学公式的排版。LaTeX是科学文献交流和出版的事实标准。简单来说,相比于Word排版时需要设…

    2022年7月14日
    44
  • JSP Include 文件方式

    JSP Include 文件方式两种方式JSPinclude文件有两种方式:1. 使用include标签,像  2.使用jsp:include标签,像              使用的差异在于:方式1比较适合引入一些静态的,比较少改动的内容;比如网页的header和footer的部分。方式2比较适合于引入改动较多的页面。

    2022年7月13日
    18
  • arm 体系架构及其工作原理图_arm架构详解

    arm 体系架构及其工作原理图_arm架构详解架构的演变历史我们首先介绍ARMLtd,这里先说的是公司而不是架构。ARM的发展历史非常久远,超乎许多人的想象。首先,我们提供一些背景信息,ARM成立于20世纪90年代末,从另一家位于剑桥的公司分拆而来,那家公司叫做AcornComputers,曾经是英国教育市场的著名个人台式计算机供应商,现已不复存在。80年代中期时,Acorn一个小团队接受了一个挑战,为他们的下一代计…

    2022年10月14日
    6
  • [一个互联网思想信徒]:今天突破69个听众

    [一个互联网思想信徒]:今天突破69个听众

    2021年11月13日
    48
  • SMO算法最通俗易懂的解释

    SMO算法最通俗易懂的解释我的机器学习教程「美团」算法工程师带你入门机器学习已经开始更新了,欢迎大家订阅~任何关于算法、编程、AI行业知识或博客内容的问题,可以随时扫码关注公众号「图灵的猫」,加入”学习小组“,沙雕博主在线答疑~此外,公众号内还有更多AI、算法、编程和大数据知识分享,以及免费的SSR节点和学习资料。其他平台(知乎/B站)也是同名「图灵的猫」,不要迷路哦~SVM通常用对偶问题来求解,这…

    2022年6月30日
    24
  • SSM整合(1)

    SSM整合(1)一、web.xml&amp;lt;?xmlversion=&quot;1.0&quot;encoding=&quot;UTF-8&quot;?&amp;gt;&amp;lt;web-appversion=&quot;2.5&quot;xmlns=&quot;http://java.sun.com/xml/ns/javaee&quot;xmlns:xsi=&quot;http://www.w

    2022年5月11日
    27

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号