java中 DigestUtils.md5Hex 的c#实现
C#
string target= "央行降息影响楼市:100万20年期房贷月供减少141元";
string result = Md5Helper.Md5Hex(aa);
//result ="98d59c461b6b40ae7cfe57c6cbdd3cc1"
java
String target= "央行降息影响楼市:100万20年期房贷月供减少141元";
String result = DigestUtils.md5Hex(aa);
//result ="98d59c461b6b40ae7cfe57c6cbdd3cc1"
对应 jar包为 commons-codec-1.6.jar
C#代码
public class Md5Helper
{
private static char[] toDigits = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
public static string Md5Hex(string I_SourceArray)
{
string R_Result;
byte[] temp = Encoding.UTF8.GetBytes(I_SourceArray);
sbyte[] temp1 = Md5Helper.ByteArray2SByteArray(temp);
R_Result = Md5Hex(temp1);
return R_Result;
}
public static string Md5Hex(sbyte[] I_SourceArray)
{
string R_Result;
sbyte[] md5SByteArray = Md5Helper.Md5Encode(I_SourceArray);
char[] charArray = Md5Helper.EncodeHex(md5SByteArray);
R_Result = new string(charArray);
return R_Result;
}
private static sbyte[] Md5Encode(sbyte[] I_Source)
{
sbyte[] R_Result;
byte[] temp = Md5Helper.SByteArray2ByteArray(I_Source);
byte[] temp1 = new MD5CryptoServiceProvider().ComputeHash(temp);
R_Result = Md5Helper.ByteArray2SByteArray(temp1);
return R_Result;
}
private static char[] EncodeHex(sbyte[] data)
{
int l = data.Length;
char[] R_Result = new char[l << 1];
for(int i =0,j =0; i<l;i++)
{
R_Result[j++] = toDigits[Md5Helper.MoveByte((0xF0 & data[i]), 4)];
R_Result[j++] = toDigits[ 0x0F & data[i] ];
}
return R_Result;
}
private static int MoveByte(int value, int pos)
{
if(value<0)
{
string s = Convert.ToString(value, 2);
for(int i=0; i< pos; i++)
{
s = "0" + s.Substring(0, 31);
}
return Convert.ToInt32(s, 2);
}
else
{
return value >> pos;
}
}
private static sbyte[] ByteArray2SByteArray(byte[] I_SourceByte)
{
return I_SourceByte.Select(p => Md5Helper.Byte2SByte(p)).ToArray();
}
private static byte[] SByteArray2ByteArray(sbyte[] I_SourceByte)
{
return I_SourceByte.Select(p => Md5Helper.SByte2Byte(p)).ToArray();
}
private static sbyte Byte2SByte(byte I_SourceSByte)
{
sbyte R_Result;
if (I_SourceSByte < 128)
{
R_Result = (sbyte)I_SourceSByte;
}
else
{
R_Result = (sbyte)(I_SourceSByte - 256);
}
return R_Result;
}
private static byte SByte2Byte(sbyte I_SourceSByte)
{
byte R_Result;
if(I_SourceSByte <0)
{
R_Result = (byte)(I_SourceSByte + 256);
}
else
{
R_Result = (byte) I_SourceSByte ;
}
return R_Result;
}
}
java中 DigestUtils.md5Hex 的c#实现的更多相关文章
- Java中比较不同的MD5计算方式
在项目中经常需要使用计算文件的md5,用作一些用途,md5计算算法,通常在网络上查询时,一般给的算法是读取整个文件的字节流,然后计算文件的md5,这种方式当文件较大,且有很大并发量时,则可能导致内存打 ...
- JAVA中获取文件MD5值的四种方法
JAVA中获取文件MD5值的四种方法其实都很类似,因为核心都是通过JAVA自带的MessageDigest类来实现.获取文件MD5值主要分为三个步骤,第一步获取文件的byte信息,第二步通过Messa ...
- JAVA中比较两个文件夹不同的方法
JAVA中比较两个文件夹不同的方法,可以通过两步来完成,首先遍历获取到文件夹下的所有文件夹和文件,再通过文件路径和文件的MD5值来判断文件的异同.具体例子如下: public class TestFo ...
- Java中使用最频繁及最通用的Java工具类
在Java中,工具类定义了一组公共方法,Java中使用最频繁及最通用的Java工具类. 一. org.apache.commons.io.IOUtils closeQuietly:关闭一个IO流.so ...
- java中MD5加密
MD5加密是一种不可逆(一些网站通过庞大的数据库可以解密一些简单的)的加密算法(其实是信息摘要算法),常用于用户密码,文件上传等 MD5算法具有以下特点: 1.压缩性:任意长度的数据,算出的MD5值长 ...
- JAVA中获取文件MD5值的方法
1 DigestUtils.md5Hex(new FileInputStream(path)); 如果你只需要使用标准的MD5,其实一行代码就够了,JAVA自带的commons-codec包就提供了获 ...
- java中常用工具类
目录 一. org.apache.commons.io.IOUtils 二. org.apache.commons.io.FileUtils 三. org.apache.commons.lang.St ...
- java中的锁
java中有哪些锁 这个问题在我看了一遍<java并发编程>后尽然无法回答,说明自己对于锁的概念了解的不够.于是再次翻看了一下书里的内容,突然有点打开脑门的感觉.看来确实是要学习的最好方式 ...
- java中的字符串相关知识整理
字符串为什么这么重要 写了多年java的开发应该对String不陌生,但是我却越发觉得它陌生.每学一门编程语言就会与字符串这个关键词打不少交道.看来它真的很重要. 字符串就是一系列的字符组合的串,如果 ...
随机推荐
- ubuntu 彻底卸载软件
找到此软件名称,然后sudo apt-get purge ......(点点为为程序名称),purge参数为彻底删除文件,然后sudo apt-get autoremove,sudo apt-get ...
- 扁平设备树(FDT)
组成 扁平设备树主要由4大部分组成:头部(header),预留内存块(memory reservation block),结构块(struct block)和字符串块(strings block).这 ...
- 详解c++指针的指针和指针的引用(转)
http://www.cnblogs.com/li-peng/p/4116349.html
- C++11 thread
//这里使用c++的thread创建了5个线程,并支持传递多个参数 void thread1(int aa,int bb) { cout << aa << bb << ...
- spark-shell和scala错误
运行spark-shell 或者scala命令,出现以下错误: Welcome to Scala version 2.10.6 (Java HotSpot(TM) 64-Bit Server VM, ...
- 黑马程序员_ Objective-c 之Foundation笔记(二)
NSArray NSArray的创建 NSArray *array = [NSArray arrayWithObject:@“jack”] 创建单个元素 NSArray *array3 = [NS ...
- mave web常用配置文件参数
<build> <finalName>rte</finalName> <resources> <resource> <director ...
- Unsupported major.minor version 52.0
jdk版本错误,默认应该选择高版本的,请检查你的配置文件引用 java.exe的路径,把它改为绝对路径 分析:其他软件如oracle安装可能会自带一些低版本的jdk,然后你项目引用如果 path=ja ...
- javascript 中slice,substr,substring方法的对比
实际开发过程中,字符串是一种最常用的一种数据类型,而在程序中对字符串的操作也是十分繁琐,javascript中就提供了很多字符串相关的方法,然而由于方法过多,很多方法功能有交叉,参数有雷同,容易使用混 ...
- 《开源安全运维平台OSSIM最佳实践》
<开源安全运维平台OSSIM最佳实践> 经多年潜心研究开源技术,历时三年创作的<开源安全运维平台OSSIM最佳实践>一书即将出版.该书用80多万字记录了,作者10多年的IT行业 ...