C++转C# 请教

花非花>雾非雾 2017-03-09 09:52:27
原C++

typedef unsigned long DWORD;
typedef unsigned char UCHAR,*PUCHAR;
typedef void *PVOID,*LPVOID;
typedef unsigned char byte;
typedef DWORD *PDWORD,*LPDWORD;


DWORD TAesClass::OnAesEncrypt(LPVOID InBuffer,DWORD InLength,LPVOID OutBuffer)
{
DWORD OutLength=0;
if (m_lpAes==NULL||OutBuffer==NULL)
{
return 0;
}

UCHAR *lpCurInBuff=(UCHAR *)InBuffer;
UCHAR *lpCurOutBuff=(UCHAR *)OutBuffer;
long blocknum=InLength/16;
long leftnum=InLength%16;
for(long i=0;i<blocknum;i++)
{
m_lpAes->Cipher(lpCurInBuff,lpCurOutBuff);
lpCurInBuff+=16;
lpCurOutBuff+=16;
OutLength+=16;
}
if(leftnum)
{
UCHAR inbuff[16];
memset(inbuff,0,16);
memcpy(inbuff,lpCurInBuff,leftnum);
m_lpAes->Cipher(inbuff,lpCurOutBuff);
lpCurOutBuff+=16;
OutLength+=16;
}

UCHAR extrabuff[16];
memset(extrabuff,0,16);
*((LPDWORD)extrabuff)=16+(16-leftnum)%16;
m_lpAes->Cipher(extrabuff,lpCurOutBuff);
OutLength+=16;
return OutLength;
}


转后的

private ulong TAesClass.OnAesEncrypt(ulong InBuffer, uint InLength, ulong OutBuffer)
{
ulong OutLength = 0;
if (TAesClass.m_lpAes == null || OutBuffer == null)
{
return 0;
}
Byte lpCurInBuff = (Byte)InBuffer;
Byte lpCurOutBuff = (Byte)OutBuffer;
long blocknum = InLength / 16;
long leftnum = InLength % 16;
for(int i =0;i<blocknum;i++)
{
lpCurInBuff+=16;
lpCurOutBuff+=16;
OutLength+=16;
}
if (leftnum != 0)
{

Byte[] inbuff = new Byte[16];
//这里应该怎么转
lpCurOutBuff+=16;
OutLength+=16;
}

Byte[] extrabuff = new Byte[16];
extrabuff = 16 + (16 - leftnum) % 16;

OutLength+=16;
return OutLength;

}


谢谢大家帮忙下
...全文
233 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzuning 2017-03-09
  • 打赏
  • 举报
回复
你没给出 m_lpAes->Cipher(lpCurInBuff,lpCurOutBuff); 的定义 并且转换后的代码也没有对应的部分
  • 打赏
  • 举报
回复
引用 7 楼 starfd 的回复:
AES实现各种语言都是一样的,只是要注意填充方式


求教下这个是C++的,但是在C#中应该是怎样的啊
  • 打赏
  • 举报
回复
AES实现各种语言都是一样的,只是要注意填充方式
xian_wwq 2017-03-09
  • 打赏
  • 举报
回复
既然是转就得对应转换 c++涉及指针的,大多需要分配空间, c#不能用基本类型直接替代,可以用byte[]来对应, 还有个更简单的, “允许不安全代码”,使用unsafe,直接用c++的代码
  • 打赏
  • 举报
回复
引用 4 楼 shingoscar 的回复:
[quote=引用 3 楼 ABC850 的回复:] [quote=引用 2 楼 shingoscar 的回复:] 如果你要算AES,就去搜下c# AES 反正看你转的,dword都变成ulong了,后面也没啥好看的了……
是的 是C++AES加密 C#的AES加密是一样的吗?[/quote] 不一样,自己搜下[/quote] 刚刚在网上找了个AESHelper,但是和原本C++的不一样啊 我对C++不太熟悉
Poopaye 2017-03-09
  • 打赏
  • 举报
回复
引用 3 楼 ABC850 的回复:
[quote=引用 2 楼 shingoscar 的回复:] 如果你要算AES,就去搜下c# AES 反正看你转的,dword都变成ulong了,后面也没啥好看的了……
是的 是C++AES加密 C#的AES加密是一样的吗?[/quote] 不一样,自己搜下
  • 打赏
  • 举报
回复
引用 2 楼 shingoscar 的回复:
如果你要算AES,就去搜下c# AES 反正看你转的,dword都变成ulong了,后面也没啥好看的了……
是的 是C++AES加密 C#的AES加密是一样的吗?
Poopaye 2017-03-09
  • 打赏
  • 举报
回复
如果你要算AES,就去搜下c# AES 反正看你转的,dword都变成ulong了,后面也没啥好看的了……
  • 打赏
  • 举报
回复
自己顶一下,大家帮忙下

111,119

社区成员

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

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

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