高人帮看,签名串16进制转2进制后base64加密处理,验签时将处理的签名串16进制转2进制后base64解密,签名传比最初多了几个0,不知道为啥?????????

jf_emal 2009-05-27 05:47:21
高人帮看,签名串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;
}
...全文
150 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
jf_emal 2009-05-27
  • 打赏
  • 举报
回复
zgke 牛 按你说的做问题解决了!!多谢多谢
也非常感谢fflyn。
fflyn 2009-05-27
  • 打赏
  • 举报
回复
1楼也有问题 万一就是 5个0 呢 怎么解释?
fflyn 2009-05-27
  • 打赏
  • 举报
回复
我在做一个加密算法中 也出现过这种问题

最后解决了 我的原因是这样 不知道你检查一下是不是这样
我把所有的数据都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字段换准确吧
希望能帮上搂住的忙
zgke 2009-05-27
  • 打赏
  • 举报
回复
byte _Value =0x0A;

Convert.ToString(_Value ,16)=="A"

使用PadLeft把.



a += Convert.ToString(s[i], 16).PadLeft(2,'0');

111,119

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧