繁体   English   中英

AES加密和解密Java

[英]AES encryption and Decryption Java

我正在使用AES加密字符串,并想在其他PC上解密它。 如果我在同一台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));
    }
}

您通常有3个选择:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM