首页 新闻 搜索 专区 学院

.NET 互操作:底层是C写的DES加密DLL,现用C#调用产生郁闷的问题?

0
[已解决问题] 解决于 2010-11-08 12:50

现有一DES加密模块,用C写的。加密接口输入参数为:

typedef struct _wfs_hex_data
{
USHORT    usLength;
LPBYTE    lpbData;
} WFSXDATA, *LPWFSXDATA;

加密后返回的也是WFSXDATA的指针。C#下我定义该结构体为:

[StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
public struct WFSXDATA
 {
            public ushort usLength;
            public IntPtr lpbData;
}

但问题是每次对同一数据源做加密操作,接到的数据都不一样。问题在哪里呢?是应为byte和char在不同平台上的差距造成的吗?各位大侠支招啊!哥们郁闷了几天。

接受加密结果的关键代码如下:

byte[] bys = new byte[xData.usLength];
if (xData.lpbData != IntPtr.Zero)
{
         for (int i = 0; i < xData.usLength; i++)
         {
             bys[i] = Marshal.ReadByte(xData.lpbData, i); //从指针指定索引读取一个字节
             i++;
         }
}

其中xData为WFSXDATA类型。

苍岭飞龙的主页 苍岭飞龙 | 初学一级 | 园豆:0
提问于:2010-11-08 10:08
< >
分享
最佳答案
0

在DES加密中有一个随机向量 DES IV,如果你没有为每次加密指定固定的 IV,那么每次加密将使用系统随机生成的 IV 向量加密你的字符串,所以每次加密结果不同。

Launcher | 高人七级 |园豆:45045 | 2010-11-08 11:42
老兄所言甚是,但问题我已找到,并非IV,但还是多谢了!
苍岭飞龙 | 园豆:0 (初学一级) | 2010-11-08 12:50
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册