为什么同一个DLL,c#与MFC的调用结果不一致呢?

蜗牛的信仰 2010-11-23 11:24:39
以下项目均在vs2008下开发:

陈述:
MFC项目为UNICODE
DLL项目为多字符集
C#项目为UNICODE

问题:
MFC调用DLL进行加解密,与C#调用DLL进行加解密得出的结果不一致!

MFC调用代码如下:

HINSTANCE LibHandle;
LibHandle = LoadLibrary(_T("3Des.dll"));
App->decryptFun = (DecryptFunPtr) GetProcAddress(LibHandle, ("RunDes"));

BYTE szKey1[9] = {"miyue001"};//密钥1
BYTE szKey2[9] = {"miyue002"};//密钥2
BYTE szIn[1024] = {'\0'};
BYTE szOut[1024] = {'\0'};
memcpy(szIn,"1234",4);//加密的内容

App->ecryptFun(false,szIn,4,szOut,szKey1,szKey2);//加密
memset(szIn,0,1024);
App->ecryptFun(true,szOut,8,szIn,szKey1,szKey2); //解密

//MFC调用加密后在解密,得出的明文正确(1234)!


C#调用DLL代码如下:

[DllImport("3DES.dll", EntryPoint = "RunDes")]
unsafe public static extern bool RunDes(bool bType, String strIn, int inLen, Byte[] strOut, String strKey, String strSubKey);

String msg;
String test = "1234";
String key = "miyue001";
String SubKey = "miyue001";
Byte[] testStr = new Byte[8];
bool rt = RunDes(false, test, 4,testStr, key, SubKey);//加密!为何testStr与MFC调用加密的密文不一致,调用的都是同一个DLL呀!


后来我把DLL项目也换成UNICODE,也不行,一样的结果!高手帮解答呀!
...全文
230 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
长明 2010-11-23
  • 打赏
  • 举报
回复
DLL也是在VS2008下开发的嘛?
蜗牛的信仰 2010-11-23
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 sp1234 的回复:]
miyue002写成miyue001了。
[/Quote]
不是的,这个是我复制下来的, 实际我测试的时候已经改了的, 结果一样不行的
ZengHD 2010-11-23
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 sp1234 的回复:]

miyue002写成miyue001了。
[/Quote]
犀利眼

  • 打赏
  • 举报
回复
miyue002写成miyue001了。
蜗牛的信仰 2010-11-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 mjp1234airen4385 的回复:]
Byte[] strOut 改为StringBuilder strOut
[/Quote]

改了,可是怎么看结果呢? 我要看strOut(跨嫧?b€)里的16进制值,以便对比结果
mjp1234airen4385 2010-11-23
  • 打赏
  • 举报
回复
Byte[] strOut 改为StringBuilder strOut
长明 2010-11-23
  • 打赏
  • 举报
回复
加解密函数中 string与hex转换的时候编码要统一。

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧