我们必须为外部接口实现加密.接口的所有者提供了有关如何在我们这方面进行相同加密的文档.但是,此文档在C#中,并且我们在PHP中工作.
我们理解的大多数部分,除了它们似乎将散列类型转换为整数.他们的代码为:
// hashString exists and is a md5 a like string
int[] keyBuffer = new int[hashString.length];
for (int i=0; i<hashString.length; i++) {
keyBuffer[i] = (int)hashString[i];
}
在PHP中,将字母转换为int时,您得到0(int).由于我们无法想象这是第三方的意思,因此我们相信C#会做其他事情.
C#还会强制转换为int 0还是可能转换为char?
其次,原始的hashString长为320.这意味着代码将创建一个320长的int?在PHP中,您没有像C#那样保留内存的想法.但是,当我们尝试将一个320长的字符串类型转换为一个int时,会得到一个19字符长的int.
在字符串中强制转换一个很长的“数字”时,C#是否还会创建一个较短的int?
解决方法:
您要将char转换为int.字符是UTF-16代码单元-无符号的16位整数(范围是[0,65535]).您得到的值基本上会扩展为32位有符号整数.因此,例如,“ A”以65结尾,而欧元符号(U 20AC)则以8364(0x20ac)结尾.