Java的字节(byte)数组与Python3中的字节类型负值问题

2023-04-12 09:22:40 浏览数 (4)

在Java中,字节数组可以存放负值,这是因为Java的byte类型的取值范围为-128到127之间,而在Python3中,bytes的取值范围为0到256。

代码语言:javascript复制
Java: -127~128

Python:0~256

在某些场景下,比如AES加密时,会用到Key、IV(偏移量)等参数值的定义,在Java中有可能是如下的:

代码语言:javascript复制
public static byte[] iv = new byte[] { 1, 3, 8, 22, -13, 125, -40, -124, -27, -10, 57, 13, 46, 22, -3, 5 };

此时如果需要通过Python3来实现同样的加密算法则会出现一个问题,就是上面Java代码中的负值无法在Python3中直接表示。

面对这种情况,在Python3中可用如下方法进行转换:

代码语言:javascript复制
iv = [1, 3, 8, 22, -13, 125, -40, -124, -27, -10, 57, 13, 46, 22, -3, 5]
iv_byte = bytes(i % 256 for i in iv)

之后在传入Python中对应的AES算法函数当中,相应的加密结果便一致了。

0 人点赞