java 加密API AES RSA MD5 SHA-1 SHA-256

这篇博客详细介绍了几种常见的加解密和哈希算法的Java实现,包括AES的ECB模式加解密、RSA的公钥私钥加密解密以及MD5、SHA-1和SHA-256的哈希计算。通过示例代码,展示了如何在实际应用中使用这些技术确保数据的安全性和完整性。

AES ----

public static String aesEncode(String message, String key) {
        try {
            Cipher c = Cipher.getInstance("AES/ECB/PKCS5Padding");

            SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes("UTF-8"),"AES");

            c.init(Cipher.ENCRYPT_MODE,secretKeySpec);
            byte[] bytes = c.doFinal(message.getBytes("UTF-8"));
            byte[] encode = Base64.getEncoder().encode(bytes);
            return new String(encode,"UTF-8");
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (NoSuchPaddingException e) {
            e.printStackTrace();
        } catch (BadPaddingException e) {
            e.printStackTrace();
        } catch (IllegalBlockSizeException e) {
            e.printStackTrace();
        } catch (InvalidKeyException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return null;
    }


    public static String aesDecode(String message, String key) {
        try {
            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
            SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes("UTF-8"),"AES");
            cipher.init(Cipher.DECRYPT_MODE,secretKeySpec);
            byte[] bytes = cipher.doFinal(Base64.getDecoder().decode(message.getBytes("UTF-8")));
            return new String(bytes,"UTF-8");

        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (NoSuchPaddingException e) {
            e.printStackTrace();
        } catch (InvalidKeyException e) {
            e.printStackTrace();
        } catch (BadPaddingException e) {
            e.printStackTrace();
        } catch (IllegalBlockSizeException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }


        return null;
    }

RSA -----

 private static String rsaEncode(String message,PublicKey key) {
        try {

            Cipher cipher = Cipher.getInstance("RSA");

            cipher.init(Cipher.ENCRYPT_MODE,key);

            byte[] bytes = cipher.doFinal(message.getBytes());

            byte[] encode = Base64.getEncoder().encode(bytes);
            System.out.println(new String(encode));
            return new String(encode);

        } catch (NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException e) {
            e.printStackTrace();
        } catch (BadPaddingException e) {
            e.printStackTrace();
        } catch (IllegalBlockSizeException e) {
            e.printStackTrace();
        }
        return null;
    }



    public static String decode(String message, PrivateKey key){

        try {
            Cipher cipher = Cipher.getInstance("RSA");
            cipher.init(Cipher.DECRYPT_MODE,key);
            byte[] bytes = cipher.doFinal(Base64.getDecoder().decode(message.getBytes()));
            return new String(bytes);
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (NoSuchPaddingException e) {
            e.printStackTrace();
        } catch (InvalidKeyException e) {
            e.printStackTrace();
        } catch (BadPaddingException e) {
            e.printStackTrace();
        } catch (IllegalBlockSizeException e) {
            e.printStackTrace();
        }
        return null;
    }

MD5 SHA-1 SHA-256 —

private static String md5Encode(String message) {
        try {
            MessageDigest messageDigest = MessageDigest.getInstance("MD5");
            byte[] digest = messageDigest.digest(message.getBytes());


            StringBuilder builder = byte2Hex(digest);

            System.out.println(builder);

            return builder.toString();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }

        return null;
    }


    private static String sha1Encode(String message){

        try {
            MessageDigest messageDigest = MessageDigest.getInstance("SHA-1");
            byte[] digest = messageDigest.digest(message.getBytes());
            StringBuilder builder = byte2Hex(digest);

            System.out.println(builder);
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }

        return null;
    }

    private static String sha128Encode(String message){

        try {
            MessageDigest messageDigest = MessageDigest.getInstance("SHA-256");
            byte[] digest = messageDigest.digest(message.getBytes());
            StringBuilder builder = byte2Hex(digest);

            System.out.println(builder);
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }

        return null;
    }

    private static StringBuilder byte2Hex(byte[] digest) {
        StringBuilder builder = new StringBuilder();
        for (byte b : digest) {
            String format = String.format("%02x", b);
            builder.append(format);
        }
        return builder;
    }
为了正确配置 `ssl_ciphers` 以优先使用 `ECDHE-RSA-AES256-GCM-SHA384` 和其他 AES 加密套件,同时确保安全性与兼容性,需要结合现代安全标准和实际应用场景进行合理设置。 ### 配置建议 1. **优先使用现代加密套件** `ECDHE-RSA-AES256-GCM-SHA384` 是一个安全性较高且性能良好的加密套件,支持前向保密和 AES-GCM 模式[^1]。可以将其放在配置的最前面,以优先使用。 2. **包含其他 AES 加密套件** 除了 `ECDHE-RSA-AES256-GCM-SHA384`,还可以包含 `ECDHE-RSA-AES128-GCM-SHA256` 和 `ECDHE-RSA-CHACHA20-POLY1305-SHA256` 以提供更广泛的兼容性。 3. **避免不安全的加密套件** 应避免使用 `CBC` 模式(如 `ECDHE-RSA-AES128-CBC-SHA256` 和 `ECDHE-RSA-AES256-CBC-SHA384`),因为它们可能受到 BEAST 或 Lucky13 等攻击的影响。 4. **配置示例** 在 Nginx 中,可以通过 `ssl_ciphers` 指令配置加密套件,并结合 `ssl_protocols` 和 `ssl_prefer_server_ciphers` 来进一步优化安全性: ```nginx ssl_protocols TLSv1.2 TLSv1.3; # 支持 TLS 1.2 和 TLS 1.3 ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-CHACHA20-POLY1305-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; ssl_prefer_server_ciphers on; ``` 5. **验证配置** 配置完成后,可以使用工具如 `openssl ciphers` 或在线服务(如 SSL Labs 的 SSL Test)验证加密套件是否正确加载,并检查服务器的 TLS 配置是否符合安全标准。 ### 注意事项 - 如果使用的是 ECDSA 证书,应将 RSA 相关的加密套件替换为 ECDSA 版本(如 `ECDHE-ECDSA-AES256-GCM-SHA384`)[^2]。 - 配置加密套件时,需确保所选套件与证书类型(RSA 或 ECDSA)匹配[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值