1

我正在编写一个解密类(AES/CBC/PKCS7Padding),其中加密数据来自 C#。我想采用以下字符串(base64 编码):

usiTyri3/gPJJ0F6Kj9qYL0w/zXiUAEcslUH6/zVIjs=

并将其转换为java中的字节数组以作为密钥传递给SecretKeySpec。我知道 C# 有无符号字节和 java 只有有符号字节的问题。那么我怎样才能传递这个值大于 127 的字符串并让 java 接受键和初始化向量?

4

1 回答 1

4

您不必担心字节符号,因为 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 中应该可以正常解密,反之亦然。

于 2009-05-14T21:38:27.610 回答