AES加密和解密Java
我正在使用AES加密字符串,并希望在另一台电脑上解密。如果我在同一台电脑上执行加密和解密,则加密和解密工作正常。但对于在另一台电脑上解密,我的加密算法将生成一个“密码”,该密码与密钥一起在另一端解密。我不知道如何将密码传输到另一端 这是我的密码AES加密和解密Java,java,encryption,aes,Java,Encryption,Aes,我正在使用AES加密字符串,并希望在另一台电脑上解密。如果我在同一台电脑上执行加密和解密,则加密和解密工作正常。但对于在另一台电脑上解密,我的加密算法将生成一个“密码”,该密码与密钥一起在另一端解密。我不知道如何将密码传输到另一端 这是我的密码 public class AESCrypt { static String plainText; static byte[] plainBytesDecrypted = new byte[1024]; static byte[
public class AESCrypt {
static String plainText;
static byte[] plainBytesDecrypted = new byte[1024];
static byte[] cipherBytes = new byte[1024];
static SecretKey key;
static Cipher cipher;
public AESCrypt() throws NoSuchAlgorithmException {
KeyGenerator generator = KeyGenerator.getInstance("AES");
generator.init(128);
key = generator.generateKey();
}
public static byte[] encryption(String plainBytes) {
try {
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
cipher = Cipher.getInstance("AES/CBC/PKCS5Padding", "BC");
cipher.init(Cipher.ENCRYPT_MODE, key);
cipherBytes = cipher.doFinal(plainBytes.getBytes());
System.out.println("Encrypted data : " + new String(cipherBytes));
} catch (Exception ex) {
ex.printStackTrace();
}
return cipherBytes;
}
private static String bytesToHex(byte[] hash) {
return DatatypeConverter.printHexBinary(hash);
}
public static String Decryption() throws InvalidKeyException, IllegalBlockSizeException, InvalidAlgorithmParameterException, BadPaddingException {
cipher.init(Cipher.DECRYPT_MODE, key, cipher.getParameters());
plainBytesDecrypted = cipher.doFinal(cipherBytes);
System.out.println("Decrypted data : " + new String(plainBytesDecrypted));
return (new String(plainBytesDecrypted));
}
}
您通常有3种选择:
- 对密码/模式/填充进行硬编码,以便双方都知道您始终使用相同的格式
- 在秘密消息之前发送密码/模式/填充,以便另一方知道初始化什么密码
- 使用现有的协议,该协议已经为您包含了所有这些内容,并且可以安全地执行。例如,您可以在TLS连接内部发送数据
- 对密码/模式/填充进行硬编码,以便双方都知道您始终使用相同的格式
- 在秘密消息之前发送密码/模式/填充,以便另一方知道初始化什么密码
- 使用现有的协议,该协议已经为您包含了所有这些内容,并且可以安全地执行。例如,您可以在TLS连接内部发送数据