高人帮看,签名串16进制转2进制后base64加密处理,验签时将处理的签名串base64解密后16进制转2进制,签名串比最初多了几个0,不知道为啥?????????代码如下:private void test(){ string sign = "75e5e7a5433af0284043943be2ec7e687ad6458ab75375f236f83345c59c21444f1a2595be5f483ea29a3d83e7cb05ef926abcb813aa8ec11bc592f212df82c3e96afa59617c10f297f3f279431323852d45a69d94f055be7b07df877d641ccd97d9fc3ced1b25c342c5e55841d97440d68487bb420d5a6c07f1c159e2c9ad53"; //16进制转2进制后base64加密
sign = Convert.ToBase64String(HexStringToByteArray(sign)); //base64解密后2进制转16进制
sign = ByteArraytoHexString(Convert.FromBase64String(sign));
}private byte[] HexStringToByteArray(string s)
{
s = s.Replace(" ", "");
byte[] buffer = new byte[s.Length / 2];
for (int i = 0; i < s.Length; i += 2)
buffer[i / 2] = (byte)Convert.ToByte(s.Substring(i, 2), 16);
return buffer;
} private string ByteArraytoHexString(byte[] s){
string a ="";
for (int i = 0; i < s.Length; i++)
{
a += Convert.ToString(s[i], 16);
}
return a;
}
sign = Convert.ToBase64String(HexStringToByteArray(sign)); //base64解密后2进制转16进制
sign = ByteArraytoHexString(Convert.FromBase64String(sign));
}private byte[] HexStringToByteArray(string s)
{
s = s.Replace(" ", "");
byte[] buffer = new byte[s.Length / 2];
for (int i = 0; i < s.Length; i += 2)
buffer[i / 2] = (byte)Convert.ToByte(s.Substring(i, 2), 16);
return buffer;
} private string ByteArraytoHexString(byte[] s){
string a ="";
for (int i = 0; i < s.Length; i++)
{
a += Convert.ToString(s[i], 16);
}
return a;
}
我把所有的数据都2进制了 发现这个问题
比如有个int32 (32位整形) 123 转128位byte时
因为 有3个数字 就是 32 * 3 = 96 < 128
但是我的加密系统必须 128 位 因为有数据对齐问题
所以系统默认 是 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 00 00 以上都是16进制
然后加密问题出来了
解密回来 也有问题 系统当成 32位有4个了 还原就是 1 2 3 0 解决方法
在最后一个字段注明 长度
1 2 3 就是
00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 00 00
00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 00 03
还原就是
1 2 3 0
0 0 0 3
就是 1 2 3 用了1个128字段换准确吧
希望能帮上搂住的忙
也非常感谢fflyn。