现有一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类型。
在DES加密中有一个随机向量 DES IV,如果你没有为每次加密指定固定的 IV,那么每次加密将使用系统随机生成的 IV 向量加密你的字符串,所以每次加密结果不同。