我正在开发一个聊天应用程序。主要功能是以加密形式发送消息,当它们到达目的地时,它们可以被解密。我遇到的问题是消息没有在目的地被解密,但是它们以加密形式到达目的地。
代码如何工作:
- 客户端 A 向客户端 B 发送消息“Hello”...
当客户端 A 单击“发送消息”按钮时,我将该文本保存在一个字符串中,然后将该字符串与密钥和 iv 一起传递给方法 Encrypt 像这样......
en=enc.encrypt(msg.getBytes(), key.getBytes(), iv.getBytes());
我将该字节 (
en
) 转换为字符串并将其发送给另一个客户端 B。当我打开另一个接收消息的类时,我得到字符串 (en),然后再次将其转换为字节,然后传递给 Decrypt 方法。但是每当我运行该项目时,它都不起作用。试图在 try catch 中做到这一点,但也没有奏效。也许是因为它已经在一个大的 try catch 语句中,这使得它更加混乱。
我的代码:
package com.socket;
import org.bouncycastle.crypto.CipherParameters;
import org.bouncycastle.crypto.engines.AESEngine;
import org.bouncycastle.crypto.modes.CBCBlockCipher;
import org.bouncycastle.crypto.paddings.PaddedBufferedBlockCipher;
import org.bouncycastle.crypto.params.KeyParameter;
import org.bouncycastle.crypto.params.ParametersWithIV;
public class Encrypt {
public Encrypt() {
}
public static byte[] cipherData(PaddedBufferedBlockCipher cipher, byte[] data)
throws Exception {
int minSize = cipher.getOutputSize(data.length);
byte[] outBuf = new byte[minSize];
int length1 = cipher.processBytes(data, 0, data.length, outBuf, 0);
int length2 = cipher.doFinal(outBuf, length1);
int actualLength = length1 + length2;
byte[] result = new byte[actualLength];
System.arraycopy(outBuf, 0, result, 0, result.length);
return result;
}
public static byte[] decrypt(byte[] cipher, byte[] key, byte[] iv)
throws Exception {
PaddedBufferedBlockCipher aes = new PaddedBufferedBlockCipher(
new CBCBlockCipher(new AESEngine()));
CipherParameters ivAndKey = new ParametersWithIV(new KeyParameter(key), iv);
aes.init(false, ivAndKey);
return cipherData(aes, cipher);
}
public byte[] encrypt(byte[] plain, byte[] key, byte[] iv) throws Exception {
PaddedBufferedBlockCipher aes = new PaddedBufferedBlockCipher(
new CBCBlockCipher(
new AESEngine()));
CipherParameters ivAndKey = new ParametersWithIV(new KeyParameter(key), iv);
aes.init(true, ivAndKey);
return cipherData(aes, plain);
}
}