分别用C#和C++写了两个MD5加密方法,在C#中调用了C++的dll.
c++
extern "C" __declspec(dllexport) char * MDString (char tmp[128])
{
unsigned char digest[16];
MD5_CTX context;
/*scanf("%s",tmp);*/
int result ;
char *cString=new char; MD5Init (&context);
int len=strlen(tmp);
MD5Update (&context, (unsigned char*)tmp, len);
MD5Final (digest,&context); char * msg = new char;
/*printf("MD5Value:");*/
for(int i=0; i<16; ++i)
{
sprintf(msg,"%02X",digest[i]);
return_char[i*2] = msg[0];
return_char[i*2+1] =msg[1];
}
//sprintf(cString, "%d", result);
return return_char;
}
C#代码
[DllImport("pathjiami.dll", CallingConvention = CallingConvention.Cdecl)]
public extern static string MDString(string tmp); public Form1()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
string str = txt.Text;
//<<<<< 2013-03-20
//string txtStr = "";
////int len = str.Length;
//Encoding code = Encoding.GetEncoding("unicode");
//byte[] arr = code.GetBytes(str);
//foreach (byte ch in arr)
// txtStr += Convert.ToString(ch, 16);
//>>>>>
string msg = MDString(str);
//接收C++md5加密结果.
txt2.Text = msg; //接收C#md5加密结果.
txt3.Text = StringToMD5Hash(str);
} public string StringToMD5Hash(string inputString)
{
MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
byte[] encryptedBytes = md5.ComputeHash(Encoding.ASCII.GetBytes(inputString);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < encryptedBytes.Length; i++)
{
sb.AppendFormat("{0:x2}", encryptedBytes[i]);
}
return sb.ToString();
} 两种方法在文本框输入不含中文时获得的加密结果才是一样的,现在我想让它输入时含中文获得的加密结果也一样,可是小的实在不懂C++。只能想办法把C#方法的字符类型或者编码方式转化成C++,可是再可是...怎么弄,求大神们给解决办法..
c++
extern "C" __declspec(dllexport) char * MDString (char tmp[128])
{
unsigned char digest[16];
MD5_CTX context;
/*scanf("%s",tmp);*/
int result ;
char *cString=new char; MD5Init (&context);
int len=strlen(tmp);
MD5Update (&context, (unsigned char*)tmp, len);
MD5Final (digest,&context); char * msg = new char;
/*printf("MD5Value:");*/
for(int i=0; i<16; ++i)
{
sprintf(msg,"%02X",digest[i]);
return_char[i*2] = msg[0];
return_char[i*2+1] =msg[1];
}
//sprintf(cString, "%d", result);
return return_char;
}
C#代码
[DllImport("pathjiami.dll", CallingConvention = CallingConvention.Cdecl)]
public extern static string MDString(string tmp); public Form1()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
string str = txt.Text;
//<<<<< 2013-03-20
//string txtStr = "";
////int len = str.Length;
//Encoding code = Encoding.GetEncoding("unicode");
//byte[] arr = code.GetBytes(str);
//foreach (byte ch in arr)
// txtStr += Convert.ToString(ch, 16);
//>>>>>
string msg = MDString(str);
//接收C++md5加密结果.
txt2.Text = msg; //接收C#md5加密结果.
txt3.Text = StringToMD5Hash(str);
} public string StringToMD5Hash(string inputString)
{
MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
byte[] encryptedBytes = md5.ComputeHash(Encoding.ASCII.GetBytes(inputString);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < encryptedBytes.Length; i++)
{
sb.AppendFormat("{0:x2}", encryptedBytes[i]);
}
return sb.ToString();
} 两种方法在文本框输入不含中文时获得的加密结果才是一样的,现在我想让它输入时含中文获得的加密结果也一样,可是小的实在不懂C++。只能想办法把C#方法的字符类型或者编码方式转化成C++,可是再可是...怎么弄,求大神们给解决办法..
解决方案 »
- 帮我看看这个sql语句哪里有错误。谢谢~
- C#中如何用BinayReader读取short数组?
- 很奇怪datagridview,CellBeginEdit与CellEndEdit的e.ColumnIndex不一致...
- sql视图问题提问2
- C#如何计算字符串"Abs(Cos(Floor(50+Sin(Sqr(8)))))"的值
- C# 如何获取多个视频的总长度
- 如何看我的CSDN积分啊?
- 急,在线等。。。。。。
- 我把PICTURE中显示的图片,保存为磁盘上如A.JPG,或A.bmp,可打不开呢??
- asp.net实线docx下载出错
- .net4.0 winform 程序闪退,求解决思路
- 画图重绘疑问
示例中的MDString函数漏洞很多,不要用它。
哎,困扰了我大半天的东西原来只是一个小地方.....
Encoding.ASCII.GetBytes(inputString) 改为Encoding.Default.GetBytes(inputString)
public string StringToMD5Hash(string inputString)
{
MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
byte[] encryptedBytes = md5.ComputeHash(Encoding.ASCII.GetBytes(inputString));
StringBuilder sb = new StringBuilder();
for (int i = 0; i < encryptedBytes.Length; i++)
{
sb.AppendFormat("{0:x2}", encryptedBytes[i]);
}
return sb.ToString();
}