关于 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 2
是由于两边编码不一致的原因引起的. 你在 php 那边. 先对 chr(183)进行 utf8_encode 一下的话. 在 base64 编码后的就是 b'wrc=' (猜想的, 未验证)
|
7
0clickjacking0 OP @kimchan 确实是这样的,感谢老哥,我已经解决了
|