我正在编写一个解密类(AES / CBC / PKCS7Padding),其中加密数据来自C#。我想采用以下字符串(base64编码):
usiTyri3 / gPJJ0F6Kj9qYL0w / zXiUAEcslUH6 / zVIjs =
并将其转换为java中的字节数组,以作为密钥传递给SecretKeySpec。我知道存在C#有无符号字节而java只有有符号字节的问题。那么我怎样才能传递这个值大于127的sting并让java接受键和初始化向量?
答案 0 :(得分:3)
您不必担心字节签名,因为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中解密,反之亦然。