HMAC-MD5的C#实现
2005-12-01 11:35
211 查看
由于工作的需要,编写了一个C#版本的HMAC-MD5加密算法。
/**
*
* hmac_md5口令加密算法
*
*/
public byte[] hmac_md5(string timespan, string password)
{
byte[] b_tmp;
byte[] b_tmp1;
if (password == null)
{
return null;
}
byte[] digest = new byte[512];
byte[] k_ipad = new byte[64];
byte[] k_opad = new byte[64];
byte[] source = System.Text.ASCIIEncoding.ASCII.GetBytes(password);
System.Security.Cryptography.MD5 shainner = new MD5CryptoServiceProvider();
for (int i = 0; i < 64; i++)
{
k_ipad[i] = 0 ^ 0x36;
k_opad[i] = 0 ^ 0x5c;
}
try
{
if (source.Length > 64)
{
shainner = new MD5CryptoServiceProvider();
source = shainner.ComputeHash(source);
}
for (int i = 0; i < source.Length; i++)
{
k_ipad[i] = (byte) (source[i] ^ 0x36);
k_opad[i] = (byte) (source[i] ^ 0x5c);
}
b_tmp1 = System.Text.ASCIIEncoding.ASCII.GetBytes(timespan);
b_tmp = adding(k_ipad,b_tmp1);
shainner = new MD5CryptoServiceProvider();
digest = shainner.ComputeHash(b_tmp);
b_tmp = adding(k_opad,digest);
shainner = new MD5CryptoServiceProvider();
digest = shainner.ComputeHash(b_tmp);
return digest;
}
catch (Exception e)
{
throw e;
}
}
/**
*
* 填充byte
*
*/
public byte[] adding(byte[] a,byte[] b)
{
byte[] c = new byte[a.Length+b.Length];
a.CopyTo(c,0);
b.CopyTo(c,a.Length);
return c;
}
/**
*
* hmac_md5口令加密算法
*
*/
public byte[] hmac_md5(string timespan, string password)
{
byte[] b_tmp;
byte[] b_tmp1;
if (password == null)
{
return null;
}
byte[] digest = new byte[512];
byte[] k_ipad = new byte[64];
byte[] k_opad = new byte[64];
byte[] source = System.Text.ASCIIEncoding.ASCII.GetBytes(password);
System.Security.Cryptography.MD5 shainner = new MD5CryptoServiceProvider();
for (int i = 0; i < 64; i++)
{
k_ipad[i] = 0 ^ 0x36;
k_opad[i] = 0 ^ 0x5c;
}
try
{
if (source.Length > 64)
{
shainner = new MD5CryptoServiceProvider();
source = shainner.ComputeHash(source);
}
for (int i = 0; i < source.Length; i++)
{
k_ipad[i] = (byte) (source[i] ^ 0x36);
k_opad[i] = (byte) (source[i] ^ 0x5c);
}
b_tmp1 = System.Text.ASCIIEncoding.ASCII.GetBytes(timespan);
b_tmp = adding(k_ipad,b_tmp1);
shainner = new MD5CryptoServiceProvider();
digest = shainner.ComputeHash(b_tmp);
b_tmp = adding(k_opad,digest);
shainner = new MD5CryptoServiceProvider();
digest = shainner.ComputeHash(b_tmp);
return digest;
}
catch (Exception e)
{
throw e;
}
}
/**
*
* 填充byte
*
*/
public byte[] adding(byte[] a,byte[] b)
{
byte[] c = new byte[a.Length+b.Length];
a.CopyTo(c,0);
b.CopyTo(c,a.Length);
return c;
}
相关文章推荐
- C# 实现在本地记住登录帐号和密码和实现将MD5密码添加到数据库中
- C# 实现MD5 Hash 计算
- c# 实现MD5,SHA1,SHA256,SHA512等常用加密算法
- Java 详解单向加密--MD5、SHA和HMAC及简单实现实例
- Java实现 Base64、MD5、MAC、HMAC加密(转)
- C#实现的MD5加密功能与用法示例
- Java实现 Base64、MD5、MAC、HMAC加密
- C#封装加密算法(MD5、SHA、HMAC、DES、RSA)的一个类
- C#实现将32位MD5摘要串转换为128位二进制字符串的方法
- 请问在.net framework精简版,使用C#语言如何实现MD5和SHA1算法
- c# 实现MD5,SHA1,SHA256,SHA512等常用加密算法
- MD5原理及C#代码实现
- 使用工厂模式、策略模式实现BASE64,MD5,SHA,HMAC,DES各种加密算法
- [C#] 简单的 Helper 封装 -- SecurityHelper 安全助手:封装加密算法(MD5、SHA、HMAC、DES、RSA)
- 北森hmac的C#实现
- c# 实现MD5,SHA1,SHA256,SHA512等常用加密算法
- MD5等加密类 C#算法实现
- C#中用MD5实现数据加密
- 浅谈C#加密中MD5和SHA1加密实现
- C# .NET 实现 MD5 加密字符串(支持盐值)