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

发布于 2024-07-21 02:50:55 字数 266 浏览 8 评论 0原文

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

usiTyri3/gPJJ0F6Kj9qYL0w/zXiUAEcslUH6/zVIjs=

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

I am writing a decryption class (AES/CBC/PKCS7Padding) where the encrypted data is coming from C#. I want to take the following string (which is base64 encoded):

usiTyri3/gPJJ0F6Kj9qYL0w/zXiUAEcslUH6/zVIjs=

and convert it to a byte array in java to pass into the SecretKeySpec as the key. I know there is the issue of C# having unsigned bytes and java only having signed bytes. How then can I pass this sting which has values greater than 127 within it and have java accept the key and initialization vectors?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

坦然微笑 2024-07-28 02:50:55

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

You don't have to worry about byte signedness because base64 encoded data never uses more than 6 bits in each byte (that's why it's called base 64, because you only use 64 characters which is 6 bits, to represent part of a data byte).

If your concern is the resulting data (3 data bytes for every 4 base64 characters), don't worry about that, either. An unsigned byte 255 in C# is the same as the signed byte -1 in Java.

To encode data, you can bitwise-and each byte with 0xff and store it in an int, then encode the least significant 8 bits. Or just bitwise-or each byte with 0x80 and store it in ant int and decode the least significant 8 bits.

But I think you would be better off using Bouncy Castle or the standard JCE to deal with all that stuff. The 'S' in PKCS7 means Standard so data encrypted in C# should decrypt fine in Java and vice versa.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文