
关于 python3 中 chr(183)和 php 中的 chr(183)分别进行 base64 编码后为什么结果不一样,我个人猜测可能是因为 python3 中的字符串不能直接进行 base64 编码,需要转换成 bytes 类型后才可以,可能是转换时候出现了问题,想问各位 v 友知道是什么情况吗
# -*- coding: utf-8 -*- import base64 a = chr(183) print(a) print(base64.b64encode(bytes(a,encoding='utf-8'))) # 输出结果 b'wrc=' <?php var_dump(base64_encode(chr(183))); //输出结果 string(4) "tw==" 1 lcdtyph 2019-07-19 14:50:12 +08:00 via iPhone 因为你 py 的代码先 encode 了一次,导致 b7 前面加上了一字节的 utf8 前缀 |
2 0clickjacking0 OP @lcdtyph 那请问该如何避免这种情况 |
3 lcdtyph 2019-07-19 15:10:25 +08:00 |
4 0clickjacking0 OP @lcdtyph 问题是我这里 183 的结果是(ord('y') + 10) ^ ord('4')得出的,而且不止这一个,我要做的是把`system`这个字符串的每一位字母取出+10,也就是平移 10 个单位,然后`system`的每一位与 key = 'a4b0a0'的每一位异或后得到的值进行 base64 编码 |
5 kimchan 2019-07-19 15:39:50 +08:00 base64.b64encode(bytes(a,encoding='latin-1')) |
6 kimchan 2019-07-19 15:42:24 +08:00 是由于两边编码不一致的原因引起的. 你在 php 那边. 先对 chr(183)进行 utf8_encode 一下的话. 在 base64 编码后的就是 b'wrc=' (猜想的, 未验证) |
7 0clickjacking0 OP @kimchan 确实是这样的,感谢老哥,我已经解决了 |