攻城狮Chova加密算法原理解析!详细分析MD5实现系统加密及使用实践关注作者腾讯云开发者社区文档建议反馈控制台登录/注册首页学习活动专区圈层工具MCP广场文章/答案/技术大牛搜索搜索关闭发布攻城狮Chova社区首页 >专栏 >加密算法原理解析!详细分析MD5实现系统加密及使用实践加密算法原理解析!详细分析MD5实现系统加密及使用实践攻城狮Chova关注发布于 2022-01-22 09:02:28发布于 2022-01-22 09:02:289760举报文章被收录于专栏:攻城狮Chovas攻城狮ChovasMD5加密算法的实现原理Java中MD5加密算法的实现:代码语言:javascript复制public class MD5 {
// 全局数组
private final static String[] strDigit = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"};
public class MD5 {
}
// 返回形式为数字和字符串
private static String byteToArrayString(byte bByte) {
int iRet = bByte;
if (iRet < 0) {
iRet += 256;
}
int iD1 = iRet / 16;
int iD2 = iRet % 16;
return strDigits[iD1] + strDigits[iD2];
}
// 返回形式只为数字
private static String byteToNum(byte bByte) {
int iRet = bByte;
if (iRet < 0) {
iRet += 256;
}
return String.valueOf(iRet);
}
// 将字节数组转换成为16进制的字符串
private static String byteToString(byte[] bByte) {
StringBuffer stringBuffer = new StringBuffer();
for (int i; i < bByte.length; i++) {
StringBuffer.append(byteToArrayString(bByte[i]));
}
return stringBuffer.toString();
}
// 获取MD5值
public static String GetMD5Code(String strObj) {
String resultString = null;
try {
resultString = new String();
MessageDigest md5 = MessageDigest.getInstance("MD5");
// md5.digest() - 返回值为存放Hash值结果的byte数组
resultString = byteToString(md5.digest(strObj.getBytes()));
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return resultString;
}
} MessageDigest类MessageDigest类: 为应用程序提供信息摘要算法的功能.比如MD5算法和SHA算法信息摘要是安全的单向Hash函数 : 接收任意大小的数据,并输出固定长度的Hash值updateMessageDigest对象在开始时会被初始化对象通过调用update() 方法处理数据代码语言:javascript复制/**
* 使用指定的byte数组更新摘要
*
* @param input 指定的byte数组
*/
public void update(byte[] input);reset任何时候都可以调用reset() 方法重置摘要digest一旦所需要更新的数据都已经被更新后,应该调用digest() 方法完成Hash计算对于给定数量的更新数据 ,digest() 方法只能被调用一次.在调用digest() 方法之后,MessageDigest对象被重新设置成初始状态代码语言:javascript复制/**
* 通过执行诸如填充之类的最终操作完成Hash计算.
* 在调用此方法之后,摘要被重置
*
* @return byte[] Hash计算后的byte数组
*/
public byte[] digest();isEqual代码语言:javascript复制/**
* 比较两个摘要的相等性.做简单的字节比较
*
* @param digestA 比较的摘要字节数组A
* @param digestB 比较的摘要字节数组B
* @return boolean 是否相等
*/
public static boolean isEqual(byte[] digestA, byte[] digestB);getInstance返回实现指定摘要算法的MessageDigest对象代码语言:javascript复制/**
* 返回实现指定摘要算法的MessageDigest对象
*
* @param algorithm 请求的算法的名称
* @param provider 提供者名称
* @return MessageDigest 指定摘要算法的MessageDigest对象
* @throws NoSuchAlgorithmException 当指定的请求算法名称不存在时抛出异常
*/
public static MessageDigest getInstance(String algorithm) throws NoSuchAlgorithmException;
/**
* 返回实现指定摘要算法的MessageDigest对象
*
* @param algorithm 请求算法的名称
* @return MessageDigest 指定摘要算法的MessageDigest对象
* @throws NoSuchAlgorithmException 当指定的请求算法名称不存在时抛出异常
*/
public static MessageDigest getInstance(String algorithm, String provider) throws NoSuchAlgorithmException, NoSuchProviderException;Provider可以通过java.security.Security的getProviders() 方法获得已注册的提供者列表SUN提供的常用的算法: MD2MD5SHA-1SHA-256SHA-384SHA-512字符串的MD5加密算法使用Java自带的MessageDigest实现对文本的MD5加密算法:代码语言:javascript复制/**
* 将字符串转换为MD5
*/
public class ParseMD5 {
public static String parseStrToMd5L32(String str) {
// 将字符串转换为32位小写MD5
String reStr = null;
try {
MessageDigest md5 = MessageDigest.getInstance("MD5");
byte[] bytes = md5.digest(str.getBytes());
StringBuffer stringBuffer = new StringBuffer();
for (byte b : bytes) {
int bt = b&0xff;
if (bt < 16) {
stringBuffer.append(0);
}
stringBuffer.append(Integer.toHexString(bt));
}
reStr = stringBuffer.toString();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return reStr;
}
// 将字符串转换为32位大写的MD5
public static String parseStrToMd5U32(String str) {
String reStr = parseStrToMd5L32(str);
if (reStr != null) {
reStr = reStr.toUpperCase();
}
return resStr;
}
// 将字符串转换为16位小写的MD5
public static String parseStrToMd5L16(String str) {
String reStr = paseStrToMd5L32(str);
if (reStr != null) {
reStr = reStr.subString(8, 24);
}
return reStr;
}
// 将字符串转换为16位大写的MD5
public static String parseStrToMd5U16(String str) {
String reStr = parseStrToMd5L32(str);
if (reStr != null) {
reStr = reStr.toUpperCase().subString(8, 24);
}
return reStr;
}
}文本的MD5加密工具类Java中提供了自带的MessageDigest实现对文本的加密算法. 对文本进行加密的MD5加密工具类如下:代码语言:javascript复制public class MD5Util {
// 将文本转换为32位小写的MD5
public static String textToMd5L32(String plainText) {
String result = null;
// 判断需要转换的文本是否为空
if (StringUtils.isBlank(plainText)) {
return null;
}
try {
// 进行实例化和初始化
MessageDigest md5 = MessageDigest.getInstance("MD5");
// 得到一个操作系统默认的字节编码格式的字节数组
byte[] byteInput = plainText.getBytes();
// 对得到的字节数组进行处理
md5.update(byteInput);
// 进行Hash计算并得到返回结果
byte[] btResult = md5.digest();
// 得到进行Hash计算后数据的长度
StringBuffer stringBuffer = new StringBuffer();
for (byte b : btResult) {
int bt = b&0xff;
if (bt < 16) {
stringBuffer.append(0);
}
stringBuffer.append(Integer.toHexString(bt));
}
reStr = stringBuffer.toString();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return reStr;
}
// 将文本转换为32位大写的MD5
public static String textToMd5U32(String plainText) {
if (StringUtils.isBlank(plainText)) {
return null;
}
String result = textToMd5L32(plainText);
result = result.toUpperCase();
return result;
}
}本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2022-01-19 ,如有侵权请联系 cloudcommunity@tencent.com 删除前往查看编程算法java本文分享自 作者个人站点/博客 前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!
编程算法java评论登录后参与评论0 条评论热度最新登录 后参与评论推荐阅读目录MD5加密算法的实现原理MessageDigest类updateresetdigestisEqualgetInstance字符串的MD5加密算法文本的MD5加密工具类领券社区技术文章技术问答技术沙龙技术视频学习中心技术百科技术专区活动自媒体同步曝光计划邀请作者入驻自荐上首页技术竞赛圈层腾讯云最具价值专家腾讯云架构师技术同盟腾讯云创作之星腾讯云TDP关于社区规范免责声明联系我们友情链接MCP广场开源版权声明腾讯云开发者扫码关注腾讯云开发者
领取腾讯云代金券
热门产品域名注册云服务器区块链服务消息队列网络加速云数据库域名解析云存储视频直播热门推荐人脸识别腾讯会议企业云CDN加速视频通话图像分析MySQL 数据库SSL 证书语音识别更多推荐数据安全负载均衡短信文字识别云点播大数据小程序开发网站监控数据迁移Copyright © 2013 - 2026 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 粤公网安备44030502008569号
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档Copyright © 2013 - 2026 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有
登录 后参与评论000推荐