客户端对一个字符串利用 RSA 算法做数字签名,并将签完名后的字符串用 base64 编码,将编码后的字符串发给服务器,服务器 base64 解码后验证签名失败,但是在客户端能够使用签完名后字符串来验证,只要转换为 base64 就验证失败,求大神....
1
HarryQu 2019-07-18 10:13:02 +08:00
1. 可能一端使用了 url_safe base64,另一端使用了普通的 base64,排查下编码问题。
2. 不使用 base64 编码,直接发送数字签名,排查下签名问题。 |
2
luckyrayyy 2019-07-18 10:19:49 +08:00
base64 好像有几种标准,其中一种是在中间每隔 76 字符添加回车换行符。
如果编码和解码实现不一致,或者系统不一致,就有可能出现错误。 |
3
Vegetable 2019-07-18 10:20:55 +08:00
这个大概率是你两边算法不统一造成的,客户端自己签自己验当然没问题。#1 提到的也是需要考虑的
|
4
zhou1996 OP @HarryQu 我在客户端,不进行 base64 编码是可以验证签名的,如果用 base64 编码,再利用 base64 解码,使用解码后的字符串来验证签名,也通不过,这都是在一端完成。大神知道原因吗
|
5
HarryQu 2019-07-18 10:48:54 +08:00
你是做 Android 的吗 ? 你所使用 Base64 的类是官方自带的,还是从第三方 copy 过来的 ?
|
7
rrfeng 2019-07-18 11:34:59 +08:00
你对比下两个字符串不久看到是哪里不一样了???
|
8
ccpp132 2019-07-18 11:35:22 +08:00
你先看 base64 编码后再解码是不是内容不变,如果做不到这一点说明你用的库有问题
|
10
mengzhuo 2019-07-18 11:48:55 +08:00 via iPhone
不用 base64 用 hex 能搞定很多问题
|
13
0TSH60F7J2rVkg8t 2019-07-18 12:49:30 +08:00
1. 把你原始数据 hash 一下,得到 hash1 值。2. 你在本地 base64 encoding 后再 decoding,把 decoding 出来的数据再 hash 一下,得到 hash2。比较 hash1 和 hash2 数据,看看是不是一样的,如果不一样,说明你的 base64 代码是错的。
|
14
MonoLogueChi 2019-07-18 12:49:34 +08:00 via Android
那可能是你用错了吧,编码再解码之后内容一样,就说明不是 base64 编码的问题
|
15
ChristopherWu 2019-07-18 13:16:02 +08:00
|
18
0TSH60F7J2rVkg8t 2019-07-18 15:45:56 +08:00
@zhou1996 一样的说明 base64 加密解密都是对的。那么你是不是在用 json 传输 base64 ?考虑下 base64 里可能有字符对 json 支持不好(比如 / 和 \ ),可能你需要考虑组合 json 的时候多一步处理。可以考虑使用 base32 编码。
|
20
shm7 2019-07-18 19:01:42 +08:00 via iPhone
先判断 base64 两端是不是一样的吧?没有证据说这就是 base64 的锅
|
21
wd 2019-07-19 06:22:31 +08:00 via iPhone
你两端是不是不同的程序语言?你看看加解密的 pedding 之类的设定吧
|