Java实现的Blowfish加密转Python后加密结果不一致问题求助
问题原因说明
你两段代码的加密结果实际完全一致,差异来自Java和Python的字节打印规则不同:
- Java的
byte类型是8位有符号整数,取值范围是-128~127,超过127的字节会被表示为负数 - Python的
bytes类型打印的是无符号整数,取值范围是0~255
你可以手动换算验证:
| Java输出有符号字节 | 换算为无符号字节 | 对应Python输出值 |
|---|---|---|
| -19 | 256 - 19 = 237 | 237 |
| -42 | 256 - 42 = 214 | 214 |
| -105 | 256 - 105 = 151 | 151 |
| -126 | 256 - 126 = 130 | 130 |
| -44 | 256 - 44 = 212 | 212 |
其余正数的数值完全匹配,你的加密逻辑没有问题,只是输出展示的格式不同而已。
如果需要Java输出和Python一致的无符号数值,可以用byte & 0xFF做转换;如果需要Python输出和Java一致的有符号数值,可以用byte - 256 if byte > 127 else byte做转换。
内容的提问来源于stack exchange,提问作者Callum
相关产品推荐
相关产品推荐

