AES加密和解密Java

时间:2015-11-09 06:37:01

标签: java encryption aes

我正在使用AES加密字符串,并希望在其他电脑上解密它。如果我在同一台PC上执行加密和解密。但是对于其他PC上的解密,我的加密算法正在生成一个密码密码"这是与密钥一起在另一侧解密所需的。我不知道如何将密码转移到另一边。

这是我的代码

 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));
    }
}

1 个答案:

答案 0 :(得分:0)

一般来说,你有三个选择:

  • 对密码/模式/填充进行硬编码,以便双方都知道您始终使用相同的格式。
  • 在秘密消息之前发送密码/模式/填充,因此对方知道要初始化的密码。
  • 使用现有协议,该协议已包含所有这些内容并安全地执行。例如,您可以在TLS连接中发送数据。