<分区>
我正在编写一个解密类 (AES/CBC/PKCS7Padding),其中加密数据来自 C#。我想获取以下字符串(经过 base64 编码):
usiTyri3/gPJJ0F6Kj9qYL0w/zXiUAEcslUH6/zVIjs=
并将其转换为 java 中的字节数组,以作为 key 传递给 SecretKeySpec。我知道 C# 有无符号字节和 java 只有有符号字节的问题。那么我如何传递这个值大于 127 的字符串并让 java 接受 key 和初始化 vector ?
<分区>
我正在编写一个解密类 (AES/CBC/PKCS7Padding),其中加密数据来自 C#。我想获取以下字符串(经过 base64 编码):
usiTyri3/gPJJ0F6Kj9qYL0w/zXiUAEcslUH6/zVIjs=
并将其转换为 java 中的字节数组,以作为 key 传递给 SecretKeySpec。我知道 C# 有无符号字节和 java 只有有符号字节的问题。那么我如何传递这个值大于 127 的字符串并让 java 接受 key 和初始化 vector ?
最佳答案
您不必担心字节符号性,因为 base64 编码数据在每个字节中使用的数据永远不会超过 6 位(这就是为什么它被称为 base 64,因为您只使用 64 个字符,即 6 位,来表示部分数据字节)。
如果您关心的是结果数据(每 4 个 base64 字符对应 3 个数据字节),也不必担心。 C# 中的无符号字节 255 与 Java 中的有符号字节 -1 相同。
要对数据进行编码,您可以按位将每个字节与 0xff 一起存储在一个 int 中,然后对最低有效的 8 位进行编码。或者只是按位-或每个字节与 0x80 并将其存储在 ant int 中并解码最低有效的 8 位。
但我认为您最好使用 Bouncy CaSTLe 或标准 JCE 来处理所有这些事情。 PKCS7 中的“S”表示标准,因此用 C# 加密的数据应该可以用 Java 解密,反之亦然。
关于java - 将base64编码的字符串转换为java字节数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/865460/