小编use*_*811的帖子

解码和编码问题.android.util.*和java.util.*中Base64 Class的不同实现?

我正在编写一个App,它使用给定的String str执行以下操作:

encode(encrypt(encode(stringToBytearray(str))));
Run Code Online (Sandbox Code Playgroud)

服务器接收Base64编码的字符串,然后解码 - >解密 - >解码,从App获取发送的字符串str.

不幸的是,它不适用于所有字符串,长字符串导致长Base64字符串,我的服务器抛出以下异常:

Exception in thread "main" java.lang.IllegalArgumentException: Illegal base64 character 5b
 at java.util.Base64$Decoder.decode0(Base64.java:714)
 at java.util.Base64$Decoder.decode(Base64.java:526)
 at Main.decode(Main.java:113)
 at Main.main(ain.java:33)
Run Code Online (Sandbox Code Playgroud)

String的格式为"[string,string,...,string]",不带"s".

就像我上面提到的,对于不太长的字符串(抱歉我无法量化长度),这是有效的.所以我认为我是正确的.

奇怪的是,如果我不发送它,但解码(decrypt(decode(stringToBytearray(str)))); 设备本身的字符串,一切都很完美.

我的设置:JDK 7,eclipse(adt-bundle,android开发)(Windows 7)

JDK 8,eclipse('normal'java)(Linux(xubuntu))

是因为两个类(Base64)都是差异实现的吗?如果是这样,我怎样才能使它工作?

以下是编码/解码方法:

编码(设备:在Windows 7上,adt-bundle,Android-Dev,jdk 7):

import android.util.Base64

public byte[] encode(byte[] bytearrayToEncode){
   return Base64.encode(bytearrayToEncode, Base64.NO_WRAP|Base64.URL_SAFE);
}
Run Code Online (Sandbox Code Playgroud)

解码(服务器:Linux,jdk 8):

import java.util.Base64

public byte[] decode(byte[] bytearrayToEncode){
   return Base64.getUrlDecoder().decode(bytearrayToDecode);
}
Run Code Online (Sandbox Code Playgroud)

字符串都使用相同的字符集(utf-8)进行解码/编码!编码/解码:Base64

加密:AES

如果您需要更多信息,请问,但我想我提供了所有必要的信息.

编辑:

public String bytearrayToString(byte[] bytearray){
    String str = null;
    try {
        str = new String(bytearray, "UTF-8"); …
Run Code Online (Sandbox Code Playgroud)

java base64 encoding android decoding

10
推荐指数
1
解决办法
1万
查看次数

Headerfile dh.h 中缺少定义(openssl 1.1.0f)

出于某种原因,我找不到“struct dh_st”的定义+成员。它应该在 openssl/dh.h 中,但事实并非如此。但是,在较早版本的 openssl (openssl-1.0/openssl/dh.h) 中,有一个定义(不过我需要使用 1.1.0f)。

相关部分的代码片段:

DH *dh_obj;
// [...]
BIGNUM *temp_p = dh_obj->p; // p is not accessible/visible here!
// [...]
Run Code Online (Sandbox Code Playgroud)

在 gcc 7.1.1 中编译期间的错误消息:

gcc -o dh dh.c -L/usr/lib -lssl -lcrypto && ./dh

dh.c:在函数“main”中:dh.c:57:26:错误:解引用指向不完整类型“DH {aka struct dh_st}”的指针 BIGNUM *temp_p = dh_obj->p;

这就是结构的样子(在 openssl-1.0 中!!不是在我当前的版本中,因为没有这样的定义)

struct dh_st {
/*
 * This first argument is used to pick up errors when a DH is passed
 * instead of a EVP_PKEY
 */
    int pad;
    int version;
    BIGNUM *p; …
Run Code Online (Sandbox Code Playgroud)

c struct openssl header-files

5
推荐指数
1
解决办法
1618
查看次数

标签 统计

android ×1

base64 ×1

c ×1

decoding ×1

encoding ×1

header-files ×1

java ×1

openssl ×1

struct ×1