正在尝试将C#解密方法转换为Java。它已解密,但格式不正确。
C#方法
mst.edges(data=True)
这是我的Java代码
public static unsafe bool Decrypt(ref byte[] buffer, ref int length, int index, uint[] key, bool bPruneTrailingNulls = false){
if (length <= index || (length - index) % 8 > 0 || key == null)
return false;
fixed (byte* numPtr1 = buffer)
{
uint* numPtr2 = (uint*) (numPtr1 + index);
int num1 = length - index;
int index1 = 0;
while (index1 < num1 / 4)
{
uint num2 = 32;
uint num3 = 3337565984;
uint num4 = 2654435769;
while (num2-- > 0U)
{
IntPtr num5 = (IntPtr) (numPtr2 + (index1 + 1));
*(int*) num5 = (int) *(uint*) num5 - (((int) numPtr2[index1] << 4 ^ (int) (numPtr2[index1] >> 5)) + (int) numPtr2[index1] ^ (int) num3 + (int) key[(int) (num3 >> 11 & 3U)]);
num3 -= num4;
IntPtr num6 = (IntPtr) (numPtr2 + index1);
*(int*) num6 = (int) *(uint*) num6 - (((int) numPtr2[index1 + 1] << 4 ^ (int) (numPtr2[index1 + 1] >> 5)) + (int) numPtr2[index1 + 1] ^ (int) num3 + (int) key[(int) (num3 & 3U)]);
}
index1 += 2;
}
}
if (bPruneTrailingNulls)
buffer = Prune(buffer);
Console.WriteLine("Buffer in: " + buffer.Length);
length = (int) BitConverter.ToUInt16(buffer, index) + 2 + index;
Console.WriteLine("Buffer out: " + buffer.Length);
return true;
}
当我使用
将返回的缓冲区转换为String时 public static byte[] decrypt(byte[] buffer,int length, int index,long[] key,boolean pruneTrailingNulls) throws Exception {
if(length<=index || (length - index) % 8 > 0 || key == null)
return null;
byte[] numPtr2=buffer;
int num1=length - index;
int index1=0;
while(index1 < num1 / 4){
long num2=32;
long num3=3337565984L;
long num4=2654435769L;
while(num2-- > 0){
long num5 = (int) (numPtr2.length + (index1 + 1));
num5 = (long) (long) num5 - (((long) numPtr2[index1] << 4 ^ (long) (numPtr2[index1] >> 5)) + (long) numPtr2[index1] ^ (long) num3 + (long)key[(int)(num3 >> 11 & 3)]);
num3 -= num4;
long num6 = (int) (numPtr2.length + index1);
num6 = (long) (long) num6 - (((long) numPtr2[index1+1] << 4 ^ (long) (numPtr2[index1+1] >> 5)) + (long) numPtr2[index1+1] ^ (long) num3 + (long)key[(int) (num3 & 3)]);
}
index1 +=2;
}
if(pruneTrailingNulls){
buffer=prune(buffer);
}
System.out.println("Buffer in: " + buffer.length);
length=(int)toInt16(buffer,index) + 2 + index;
System.out.println("Buffer out: " + buffer.length);
System.out.println("Length is: " + length);
return buffer;
}
我得到这个输出
String s=new String(buffer)
我认为从C#到Java的数据类型存在问题。任何可以帮助将C#方法转换为Java的人!