base64 编码的问题

2019-07-18 10:06:34 +08:00
 zhou1996

客户端对一个字符串利用 RSA 算法做数字签名,并将签完名后的字符串用 base64 编码,将编码后的字符串发给服务器,服务器 base64 解码后验证签名失败,但是在客户端能够使用签完名后字符串来验证,只要转换为 base64 就验证失败,求大神....

2656 次点击
所在节点    问与答
21 条回复
HarryQu
2019-07-18 10:13:02 +08:00
1. 可能一端使用了 url_safe base64,另一端使用了普通的 base64,排查下编码问题。
2. 不使用 base64 编码,直接发送数字签名,排查下签名问题。
luckyrayyy
2019-07-18 10:19:49 +08:00
base64 好像有几种标准,其中一种是在中间每隔 76 字符添加回车换行符。
如果编码和解码实现不一致,或者系统不一致,就有可能出现错误。
Vegetable
2019-07-18 10:20:55 +08:00
这个大概率是你两边算法不统一造成的,客户端自己签自己验当然没问题。#1 提到的也是需要考虑的
zhou1996
2019-07-18 10:27:17 +08:00
@HarryQu 我在客户端,不进行 base64 编码是可以验证签名的,如果用 base64 编码,再利用 base64 解码,使用解码后的字符串来验证签名,也通不过,这都是在一端完成。大神知道原因吗
HarryQu
2019-07-18 10:48:54 +08:00
你是做 Android 的吗 ? 你所使用 Base64 的类是官方自带的,还是从第三方 copy 过来的 ?
zhou1996
2019-07-18 11:27:09 +08:00
@HarryQu 不是啊,是用 c 语言写的,base64 这个方法是从 GitHub 上面找的一个小项目。
rrfeng
2019-07-18 11:34:59 +08:00
你对比下两个字符串不久看到是哪里不一样了???
ccpp132
2019-07-18 11:35:22 +08:00
你先看 base64 编码后再解码是不是内容不变,如果做不到这一点说明你用的库有问题
zhou1996
2019-07-18 11:41:23 +08:00
@ccpp132 是内容不变 啊,我用比较函数,两者都是一样的
mengzhuo
2019-07-18 11:48:55 +08:00
不用 base64 用 hex 能搞定很多问题
ccpp132
2019-07-18 12:16:33 +08:00
@zhou1996 那只能是你可能哪里用错了把
iyaozhen
2019-07-18 12:42:49 +08:00
@HarryQu 很可能是一楼的情况,还有补=,不补的。
ahhui
2019-07-18 12:49:30 +08:00
1. 把你原始数据 hash 一下,得到 hash1 值。2. 你在本地 base64 encoding 后再 decoding,把 decoding 出来的数据再 hash 一下,得到 hash2。比较 hash1 和 hash2 数据,看看是不是一样的,如果不一样,说明你的 base64 代码是错的。
MonoLogueChi
2019-07-18 12:49:34 +08:00
那可能是你用错了吧,编码再解码之后内容一样,就说明不是 base64 编码的问题
ChristopherWu
2019-07-18 13:16:02 +08:00
zhou1996
2019-07-18 15:15:25 +08:00
@ahhui 按你的方法做了,两个 hash 出来的结果是一样的
zhou1996
2019-07-18 15:39:03 +08:00
@mengzhuo 有代码吗,老哥
ahhui
2019-07-18 15:45:56 +08:00
@zhou1996 一样的说明 base64 加密解密都是对的。那么你是不是在用 json 传输 base64 ?考虑下 base64 里可能有字符对 json 支持不好(比如 / 和 \ ),可能你需要考虑组合 json 的时候多一步处理。可以考虑使用 base32 编码。
mengzhuo
2019-07-18 16:25:46 +08:00
@zhou1996 字节流转十六进制还要代码么....
shm7
2019-07-18 19:01:42 +08:00
先判断 base64 两端是不是一样的吧?没有证据说这就是 base64 的锅

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/584014

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX