如何 使 Java、C# md5 加密的值保持一致
Java C# md5 加密值保持一致,一般是编码不一致造成的值不同
| JAVA (加密:123456) | C#(加密:123456) | ||
|---|---|---|---|
| UTF-8 | e10adc3949ba59abbe56e057f20f883e | UTF8 | e10adc3949ba59abbe56e057f20f883e |
| UTF-16LE | ce0bfd15059b68d67688884d7a3d3e8c | Unicode | ce0bfd15059b68d67688884d7a3d3e8c |
| US-ASCII | e10adc3949ba59abbe56e057f20f883e | ASCII | e10adc3949ba59abbe56e057f20f883e |
| ISO-8859-1 | e10adc3949ba59abbe56e057f20f883e | --- | --- |
| UTF-16BE | ef4dafda494ad517e9823ae7d102a4c8 | BigEndianUnicode | ef4dafda494ad517e9823ae7d102a4c8 |
| UTF-16LE | ce0bfd15059b68d67688884d7a3d3e8c | ||
| UTF-16 | 5231722c0787fbf7b277a4a136f6e245 | ||
| --- | --- | UTF32 | 4fc043750a2441defd8e35d2e23e84f0 |
| --- | --- | UTF7 | e10adc3949ba59abbe56e057f20f883e |
Java 代码如下
package com.vipsoft.core.util;
import java.security.MessageDigest;
public class Md5Helper {
public static final String EMPTY_STRING = "";
private final static String[] hexDigits = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"};
private static String byteToHexString(byte b) {
int n = b;
if (n < 0) {
n = 256 + n;
}
int d1 = n / 16;
int d2 = n % 16;
return hexDigits[d1] + hexDigits[d2];
}
private static String byteArrayToHexString(byte[] b) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < b.length; i++) {
sb.append(byteToHexString(b[i]));
}
return sb.toString();
}
public static String MD5Encode(String origin) {
String result = null;
try {
result = origin;
MessageDigest md = MessageDigest.getInstance("MD5");
result = byteArrayToHexString(md.digest(result.getBytes("UTF-8")));
} catch (Exception ex) {
ex.printStackTrace();
}
return result;
}
}
C# 代码如下
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
namespace VipSoft.Core
{
public class Md5Helper
{
public static string MD5Encode(string origin)
{
var md5 = new MD5CryptoServiceProvider();
byte[] clearBytes = System.Text.Encoding.UTF8.GetBytes(origin);
byte[] targetData = md5.ComputeHash(clearBytes);
string byte2String = BitConverter.ToString(targetData);
return byte2String.Replace("-","").ToLower();
}
}
}
C# => System.Text.Encoding.UTF8
JAVA => StandardCharsets
package java.nio.charset;
/**
* Constant definitions for the standard {@link Charset Charsets}. These
* charsets are guaranteed to be available on every implementation of the Java
* platform.
*
* @see <a href="Charset#standard">Standard Charsets</a>
* @since 1.7
*/
public final class StandardCharsets {
private StandardCharsets() {
throw new AssertionError("No java.nio.charset.StandardCharsets instances for you!");
}
/**
* Seven-bit ASCII, a.k.a. ISO646-US, a.k.a. the Basic Latin block of the
* Unicode character set
*/
public static final Charset US_ASCII = Charset.forName("US-ASCII");
/**
* ISO Latin Alphabet No. 1, a.k.a. ISO-LATIN-1
*/
public static final Charset ISO_8859_1 = Charset.forName("ISO-8859-1");
/**
* Eight-bit UCS Transformation Format
*/
public static final Charset UTF_8 = Charset.forName("UTF-8");
/**
* Sixteen-bit UCS Transformation Format, big-endian byte order
*/
public static final Charset UTF_16BE = Charset.forName("UTF-16BE");
/**
* Sixteen-bit UCS Transformation Format, little-endian byte order
*/
public static final Charset UTF_16LE = Charset.forName("UTF-16LE");
/**
* Sixteen-bit UCS Transformation Format, byte order identified by an
* optional byte-order mark
*/
public static final Charset UTF_16 = Charset.forName("UTF-16");
}
Charset 是 Java 中的一个类,它代表了字符集。字符集是一组字符的集合,每个字符都有一个唯一的数字表示。Charset 类提供了一组预定义的常量来表示常见的字符集。
以下是一些常见的 Charset 编码常量:
US-ASCII:
Charset.forName("US-ASCII")- 7位ASCII字符集,包括128个字符。
ISO-8859-1 (Latin-1):
Charset.forName("ISO-8859-1")- 对西欧语言进行编码,是ASCII的超集。
UTF-8:
Charset.forName("UTF-8")- 一种变长编码,用于表示Unicode字符集。它是目前最常用的编码之一,能够表示世界上几乎所有的书写系统。
UTF-16:
Charset.forName("UTF-16")- 使用16位单元对Unicode字符进行编码。它能够表示所有的Unicode字符。
UTF-16BE 和 UTF-16LE:
Charset.forName("UTF-16BE")Charset.forName("UTF-16LE")- 它们是UTF-16的两种变体,分别代表大端和小端字节序。
其他:
还有许多其他的字符集和编码,例如Charset.forName("GB2312")(用于简体中文)和Charset.forName("Shift_JIS")(用于日语)等。
当处理文本数据时,选择合适的字符集非常重要,因为错误的字符集可能会导致乱码或数据丢失。UTF-8 由于其广泛的兼容性和能够表示几乎所有的Unicode字符,通常是一个很好的选择。
https://www.cnblogs.com/zengguoyu/p/3973483.html
如何 使 Java、C# md5 加密的值保持一致的更多相关文章
- 使用JAVA进行MD5加密后所遇到的一些问题
前言:这几天在研究apache shiro如何使用,这好用到了给密码加密的地方,就碰巧研究了下java的MD5加密是如何实现的,下面记录下我遇到的一些小问题. 使用java进行MD5加密非常的简单,代 ...
- Java实现MD5加密及解密的代码实例分享
链接:http://www.jb51.net/article/86027.htm Java实现MD5加密及解密的代码实例分享 作者:厦门大学陈黎栋 字体:[增加 减小] 类型:转载 时间:2016-0 ...
- Java C# MD5 加密串一致性
Java C# MD5 加密串一致性 Java public final static String md5(String s) { char hexDigits[] = { '0', '1', ...
- Java生成MD5加密字符串代码实例
这篇文章主要介绍了Java生成MD5加密字符串代码实例,本文对MD5的作用作了一些介绍,然后给出了Java下生成MD5加密字符串的代码示例,需要的朋友可以参考下 (1)一般使用的数据库中都会保存用 ...
- Java实现MD5加密_字符串加密_文件加密
Java实现MD5加密,具体代码如下: package com.bstek.tools; import java.io.FileInputStream; import java.io.IOExcept ...
- java 实现md5加密的三种方式与解密
java 实现md5加密的三种方式 CreateTime--2018年5月31日15点04分 Author:Marydon 一.解密 说明:截止文章发布,Java没有实现解密,但是已有网站可以免费 ...
- Java的MD5加密和解密
链接:http://www.cnblogs.com/android-blogs/p/5305598.html Java的MD5加密和解密 简单demo: import java.security.* ...
- java中md5加密方法
package com.func; import java.io.UnsupportedEncodingException;import java.math.BigInteger;import jav ...
- java中MD5加密
MD5加密是一种不可逆(一些网站通过庞大的数据库可以解密一些简单的)的加密算法(其实是信息摘要算法),常用于用户密码,文件上传等 MD5算法具有以下特点: 1.压缩性:任意长度的数据,算出的MD5值长 ...
- JAVA中MD5加密实现
MD5加密实现 结 package com.pb; import java.io.UnsupportedEncodingException; import java.security.Message ...
随机推荐
- Java读取某个文件夹下的所有文件(支持多级文件夹)
源码如下: package com.vocy.water.batch; import java.io.FileNotFoundException; import java.io.IOException ...
- Longest Divisors Interval
Smiling & Weeping ----总有一个人, 一直住在心底, 却消失在生活里. Given a positive integer n, find the maximum size ...
- Github的一个奇技淫巧
背景 前段时间给 VictoriaLogs 提交了一个 PR: https://github.com/VictoriaMetrics/VictoriaMetrics/pull/4934 本来一切都很顺 ...
- SpringCloud搭建保姆级教程
一.搭建服务注册与发现中⼼ 使⽤Spring Cloud Netflix 中的 Eureka 搭建服务注册与发现中⼼ 1.创建SpringBoot应用添加依赖 1.spring web 2.eurek ...
- Solution Set -「ABC 192」
「ABC 113A」Star Link. 略. #include<cstdio> int x; int main() { scanf("%d",&x); for ...
- Modbus转profinet网关连接1200PLC在博图组态与英威腾驱动器通讯程序案例
Modbus 转 profinet 网关连接 1200PLC 在博图组态与英威腾驱动器通讯程序案例 本案例给大家介绍由兴达易控 modbus 转 profinet 网关连接 1200PLC 在博图软件 ...
- LINUX线程之一次性初始化(PTHREAD_ONCE)
1.一次性初始化 在 Linux函数列表 中描述了Linux线程中的常用函数,这里详细讲解 pthread_once 函数的功能和使用. (1)为何有"一次性初始化概念"出现? 其 ...
- Atcoder Regular Contest 167
卡 B 下大分了. A. Toasts for Breakfast Party 发现题意是让方差尽可能小,就是让 \(A\) 里的值尽可能接近. 所以从小到大排个序,把 \(A_{N,\dots,N- ...
- P1144 最短路计数 题解
Problem 考察算法:拓扑排序 + \(DP\) + \(Dijkstra\). 题目简述 给出一个无向无权图,问从顶点 \(1\) 开始,到其他每个点的最短路有几条. 思路 先求出 \(1\) ...
- P4022 [CTSC2012]熟悉的文章 题解
题目链接 简要题意 给定 \(m\) 个模板串和 \(n\) 个匹配串,如果一个字符串是一个模板串的子串且长度不小于 \(L\) 则称其为"熟悉的",对于每个匹配串,求一个最大的 ...