高人帮看,签名串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;
}

解决方案 »

  1.   

    byte _Value =0x0A;Convert.ToString(_Value ,16)=="A"使用PadLeft把.   a += Convert.ToString(s[i], 16).PadLeft(2,'0');
      

  2.   

    我在做一个加密算法中 也出现过这种问题最后解决了 我的原因是这样 不知道你检查一下是不是这样
    我把所有的数据都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字段换准确吧
    希望能帮上搂住的忙
      
      

  3.   

    zgke 牛 按你说的做问题解决了!!多谢多谢
    也非常感谢fflyn。