通过 TCP 连接发送整数"Illegal base64 character 3"(AES 加密字符串)



我有以下整数通过TCP发送:3964956

发件人代码:

writer.write(Aes.encrypt(new String(file.length() + ""), node.getEncryptionKey()) + "n");
writer.flush();

接收器代码:

String size;
if ((size = reader.readLine()) != null) {
if ((size = Aes.decrypt(size, node.getEncryptionKey())) == null) throw new Exception("decrypt err"); // <---
// ERROR IS ABOVE LINE
final long byteSize = Long.parseLong(size);
byte[] bytes = new byte[5 * 1024];

异常:java.lang.IllegalArgumentException: Illegal base64 character 3当接收者试图解密数据包时抛出异常,实际加密的代码如下。

加密类(Aes.java(:

/***
* Encrypt a String using AES.
*
* @param strToEncrypt The target String to encrypt
* @param secret The secret key you wish to encrypt
*               the String with, this secret key
*               will be used to decrypt the String
* @return The encrypted String
*/
public static String encrypt(String strToEncrypt, String secret) throws Exception {
setKey(secret);
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
return Base64.getEncoder().encodeToString(cipher.doFinal(strToEncrypt.getBytes("UTF-8")));
}
/***
* Decrypt the AES Encrypted String.
*
* @param strToDecrypt The target String to decrypt
* @param secret The secret key that was used to encrypt this String
* @return The decrypted String
*/
public static String decrypt(String strToDecrypt, String secret) throws Exception {
setKey(secret);
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5PADDING");
cipher.init(Cipher.DECRYPT_MODE, secretKey);
return new String(cipher.doFinal(Base64.getDecoder().decode(strToDecrypt)));
}

编辑:更多代码如下;在上面指定的特定整数发送之前,有一个完整的身份验证过程,所有数据都使用相同的AES加密,但数据不会像当前数据那样抛出任何错误。

套接字对象

try(InputStream is = socket.getInputStream(); BufferedWriter bwr = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); BufferedReader reader = new BufferedReader(new InputStreamReader(is))){
...
}

接收整数的函数:

processStreamsForDownload(cdn_node, reader, response.getOutputStream(), is);

如果还有什么我可以补充的,请告诉我。

由于缺少大量代码,很难给出更好的答案。

我只是使用了发布的代码,填补了缺失的空白,它起到了作用。(密钥算法:PBKDF2WithHmacSHA256PipedReaderPipedWriter作为ReaderWriter(

最好发布一个完整的样本。。。无论如何,尝试隔离问题,例如,首先尝试加密某些内容并直接解密结果,以检查是否正常工作。接下来打印出发送的内容和接收的内容(我猜发送的数据和接收的数据不一样(。

显然不是直接的答案,但它应该显示出一种可能的方法来找到给定信息的问题

相关内容

  • 没有找到相关文章

最新更新