Java 在通过URL后未保留Base64中编码的加密字符串?

Java 在通过URL后未保留Base64中编码的加密字符串?,java,encryption,base64,urlencode,Java,Encryption,Base64,Urlencode,“数据”字符串在Base64(URL安全版本)中编码,然后加密到字节数组。此字节数组被转换为字符串,并发送到REST web服务。当它到达web服务端时,字符串的长度已更改。我不是专家,我做错了什么 守则: //CLIENT SIDE import org.apache.commons.codec.binary.Base64; String data = "My message to be encrypted"; PublicKey pubKey = readPubli

“数据”
字符串
Base64
(URL安全版本)中编码,然后加密到
字节数组
。此
字节数组
被转换为
字符串
,并发送到REST web服务。当它到达web服务端时,
字符串的长度已更改。我不是专家,我做错了什么

守则:

//CLIENT SIDE
import org.apache.commons.codec.binary.Base64;    

String data = "My message to be encrypted";        
PublicKey pubKey = readPublicKeyFromFile();
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, pubKey);
byte[] encryptedData = cipher.doFinal(Base64.encodeBase64URLSafe(data.getBytes()));

System.out.println("length of original data string: " + data.length());
System.out.println("length of original data string turned into byte array: " + data.getBytes().length);
System.out.println("length of data string encrypted into byte array: " + encryptedData.length);

String encryptedDataToString = new String(encrypedData,"UTF-8");
System.out.println("length encrypted String into byte array, converted back to String for url: " + encryptedDataToString.length);

httpclient = new DefaultHttpClient();
builder = new URIBuilder();
builder.setScheme("http").setHost(xxx + "webresources/GetData/" + path)
                    .setParameter("data", encryptedDataToString);
            uri = builder.build();



//SERVER SIDE
import org.apache.commons.codec.binary.Base64;

@GET
@Path("path")
@Produces("text/plain")
public String getToken(@QueryParam("data") String data) {

System.out.println("length of data: " + data.length());
System.out.println("length of data to byte array wthout decoding: " + data.getBytes().length);
System.out.println("length of data to byte decoded: " + Base64.decodeBase64(data).length);


//CONSOLE

//CLIENT SIDE
length of original data string: 37
length of original data string turned into byte array: 37
length of data string encrypted into byte array: 256
length encrypted String into byte array, converted back to String for url: 256

//SERVER SIDE
INFO: length of data: 237
INFO: length of data to byte wthout decoding: 444
INFO: length of data to byte decoded: 4
数据
字符串
显示在URL中,客户端: 中国常用常用常用常用常用词汇词汇(中国常用常用常用常用常用常用常用常用常用常用常用常用常用常用常用常用常用常用常用常用常用常用常用常用常用常用常用常用常用常用常用常用常用常用常用常用常用常用常用常用常用常用常用常用常用常用常用常用常用常用词汇词汇(中国)中国常用常用常用常用词汇词汇词汇词汇(北京)中国常用常用常用常用词汇词汇(北京)基本词汇(北京)中国常用常用常用常用词汇(北京)北京北京常用常用常用词汇(北京)北京北京北京常用常用常用常用词汇词汇(北京常用词汇)中国常用常用词汇)中国常用常用常用词汇(北京北京北京北京北京北京常用常用常用词汇(北京北京北京常用词汇)中国常用常用常用常用词汇(北京北京北京北京北京10 10 10%中国中国中国常用常用常用常用常用词汇)中国中国常用词汇词汇词汇)北京北京北京北京北京北京常用常用常用常用词汇(北京北京北京北京北京北京北京北京北京常用常用常用常用常用常用常用常用常用常用词汇)中国中国中国中国中国中国常用常用常用词汇(北京北京北京北京北京北京北京北京北京北京北京北京BD5%EF%BF%BD%EF%BF%BD%26%EF%BF%BD%1E%7D%EF%BF%BDNAQ%EF%BF%BDlT%EF%BF%BD%(北京常用常用常用词汇词汇(北京常用常用常用词汇词汇)北京常用常用常用词汇(北京常用常用词汇)北京常用常用词汇(北京常用常用词汇)北京常用常用常用词汇(北京常用常用词汇)北京常用常用词汇(北京常用词汇)北京常用词汇(北京常用词汇)北京常用常用词汇(北京常用词汇)北京常用常用词汇(北京常用词汇)北京常用常用词汇(北京常用常用词汇)北京常用常用常用词汇(北京常用词汇)北京常用常用常用词汇(北京常用词汇)北京常用常用常用词汇(北京常用词汇)北京常用常用词汇)北京常用词汇(北京常用词汇)北京常用词汇(北京常用词汇)北京常用词汇(北京常用词汇)北京常用词汇)北京常用词汇(北京常用词汇)北京常用词汇(北京常用词汇)北京常用常用词汇)北京常用词汇(北京常用词汇)北京常用词汇(北京常用词汇)北京常用常用词汇(北京北京常用词汇)北京常用词汇)北京常用词汇(北京常用词汇)北京常用词汇(北京常用常用词汇)北京常用词汇)北京常用词汇(北京常用常用词汇)北京常用词汇)北京BF%BD%26A%EF%BF%BD%12%EF%BF%BD%EF%BF%BD%EF%BF%BD-%DE%8D%EF%BF%BD%EF%BF%BF%北京常用常用常用词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词词词词词常用常用常用常用常用常用常用常用常用常用常用常用常用常用常用常用常用常用常用常用常用常用词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇%EF%BF%BDxo%EF%BF%BDd%EF%BF%BD%08-%3F%EF%BF%BD%2F%EF%BF%BD%5Bg%EF%BF%B(6)中国常用常用常用常用词汇词汇(北京)常用常用常用常用常用常用常用常用常用常用常用常用常用常用常用常用常用词汇(北京)基本基本基本词汇(北京常用常用常用常用常用常用常用词汇(北京)基本基本词汇(北京)中国常用常用常用词汇(北京)中国常用常用词汇(北京)北京常用常用词汇(北京)北京常用常用常用词汇(北京)中国常用常用常用常用词汇(北京)中国常用常用常用常用词汇(北京)中国常用常用词汇(北京)中国常用词汇(北京常用常用常用词汇)中国常用常用词汇(北京北京)北京常用常用词汇(北京北京北京)北京常用常用词汇(北京常用词汇)基本基本基本基本词汇(北京常用常用常用词汇)北京北京北京北京北京北京常用常用词汇)中国常用常用词汇(北京北京北京北京常用常用常用词汇)北京北京北京常用词汇(北京(北京北京北京北京北京北京北京北京常用常用常用常用常用词汇)基本基本基本基本基本基本基本基本基本词汇(北京北京北京北京北京北京北京北京北京北京北京北京北京北京北京北京北京北京北京北京北京北京北京%BD%EF%BF%BD%EF%BF%BD%02%EF%BF%BD

数据
字符串
接收时,服务器端
T#���7.��K�A.�L�����^”“是吗�gmE��N�=��܀��感应电动机����相对长度单位�5.��&�}�NAQ�书信电报��VXR�我���3U����ep�áb6�εy9x������|!�0����ˏ}�&A.����-ލ���T���特兹��,���ݔ�������%�T�Q�}�F���N� �φR�W�U�xo�d-?�/�[g]�2.��k^�M��%��^����U��P���{�O��˜�K�kL8���L���


(不确定这些是实际接收到的字符,还是在控制台上打印得不好?

您必须先对其进行加密,然后用base64编码并通过网络发送。 否则,加密会创建(pseuro)随机数据,其中的某些部分可能无法正确编码以便通过web传输,并且不可避免地会损坏

如果您想压缩数据,也可以这样做。您在加密数据之前进行压缩,因为加密后,算法将更难压缩看似随机的数据。

通常,您发送给web服务的内容应该作为最后一步/更改进行base64编码。

您认为“客户端”的这行代码在做什么:
byte[]encryptedData=cipher.doFinal(base64.encodeBase64URLSafe(data.getBytes()))
?至少,如果您坚持使用此代码,请在服务器端正确地反转操作顺序。是的,这确实很愚蠢,但在困惑中,无论我做了什么都会出错,我“尝试”了。cyph3r和您的评论让我回到了简单的解决方案。