将base64编码字符串转换为java字节数组

将base64编码字符串转换为java字节数组,java,arrays,byte,unsigned,Java,Arrays,Byte,Unsigned,我正在编写一个解密类(AES/CBC/PKCS7Padding),其中加密的数据来自C#。我想获取以下字符串(base64编码): USITERI3/gPJJ0F6Kj9qYL0w/ZJJ6/zVIjs= 并将其转换为java中的字节数组,作为密钥传递到SecretKeySpec中。我知道C#有无符号字节,java只有有符号字节。那么,我如何才能传递这个sting,它的值大于127,并让java接受密钥和初始化向量呢?您不必担心字节签名,因为base64编码的数据在每个字节中使用的位数永远不会超

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

USITERI3/gPJJ0F6Kj9qYL0w/ZJJ6/zVIjs=


并将其转换为java中的字节数组,作为密钥传递到SecretKeySpec中。我知道C#有无符号字节,java只有有符号字节。那么,我如何才能传递这个sting,它的值大于127,并让java接受密钥和初始化向量呢?

您不必担心字节签名,因为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中可以很好地解密,反之亦然。

您不必担心字节的签名性,因为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中可以很好地解密,反之亦然。

。虽然接受的答案不是很好…请使用得分最高的答案。也许我对这个问题读得太多了,但我猜接受的答案可能最适合这个应用程序。不需要在解决方案中引入更多不太可能从中受益的复杂性。如果将base64编码字符串传递到sun提供的t类,并且字符串是从C#或支持无符号字节的语言编码的,那么您将在java中得到负值。该sun类也没有文档记录。有符号与无符号在这里不应该是一个问题。重复的(有一个很好的答案)。虽然接受的答案不是很好…请使用得分最高的答案。也许我对这个问题读得太多了,但我猜接受的答案可能最适合这个应用程序。不需要在解决方案中引入更多不太可能从中受益的复杂性。如果将base64编码字符串传递到sun提供的t类,并且字符串是从C#或支持无符号字节的语言编码的,那么您将在java中得到负值。该sun类也没有文档记录。有符号与无符号在这里不应该是一个问题。