我有以下整数通过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);
如果还有什么我可以补充的,请告诉我。
由于缺少大量代码,很难给出更好的答案。
我只是使用了发布的代码,填补了缺失的空白,它起到了作用。(密钥算法:PBKDF2WithHmacSHA256
;PipedReader
和PipedWriter
作为Reader
和Writer
(
最好发布一个完整的样本。。。无论如何,尝试隔离问题,例如,首先尝试加密某些内容并直接解密结果,以检查是否正常工作。接下来打印出发送的内容和接收的内容(我猜发送的数据和接收的数据不一样(。
显然不是直接的答案,但它应该显示出一种可能的方法来找到给定信息的问题