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

标签 java arrays byte unsigned

<分区>

我正在编写一个解密类 (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/

相关文章:

与 C ~ 运算符(按位非)的混淆以及比较 char 变量

java - 在Java中将字符串插入字节数组中的某个索引处

assembly - 如何将两个字节转换为一个 16 位数字?

java - IP 地址不会连接到相同的 IP 地址

java - 创建 R 包时包含 jar 文件

php - $_GET 输入参数,它是一个数组

javascript - 将一个数组元素存储在一个变量中

java - 从 selectOneMenu JSF 获取值

java - 如何将图像从 Imageview 发送到服务器

java - 移动数组中的数字