加密算法 java代码示例

加密算法分为:可逆加密和不可逆加密,不可逆加密又分为 对称加密和非对称加密。

一、不可逆加密

  • 常见的不可逆加密算法有:MD5,HMAC,SHA1,SHA2
  • 应用场景:用户密码加密,验证过程就是比较 加密后的字符串和数据库表中的是否一致。
  • 缺点:可以破解,通过比较资源库中的字符串。通过加盐方式来提高复杂度。

二、可逆加密

1.对称加密

  • 常见的对称加密算法有:DES、3DES、AES128、AES192、AES256
  • 数据加密和解密时 是同一个密钥

2.非对称加密

  • 常见的对称加密算法有:RSA、SM2
  • 两个密钥,分为公钥和私钥,只有匹配的一对密钥,才能完成对数据的加密和解密。

三、非对称加密RSA示例

package test;

import cn.hutool.crypto.SecureUtil;
import weaver.rsa.security.Base64;

import javax.crypto.Cipher;
import java.security.*;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;

/**
 * @Description: 获取RSA 公钥和私钥,并进行加密和解密
 * @Author: 
 * @CreateDate: 2022/5/13 13:35
 */
public class TestRSA {
    /**
    * @Description //获取公钥和私钥
    * @Date    2022/5/13 14:05
    * @Param   [args]
    * @return  void
    */
    public static void main(String[] args) {
        KeyPair keyPair = SecureUtil.generateKeyPair("RSA/ECB/PKCS1Padding",2048);
        String pubKey = Base64.encodeBase64String(keyPair.getPublic().getEncoded());
        String priKey = Base64.encodeBase64String(keyPair.getPrivate().getEncoded());

        System.out.println(pubKey);

        System.out.println("-------------");
    
        System.out.println(priKey);
    }
    /**
    * @Description //使用公钥进行加密
    * @Date    2022/5/13 14:05
    * @Param   [args]
    * @return  void
    */
    public void encrypt() throws Exception {
        Cipher cipher = Cipher.getInstance("RSA");

        String pubKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqHYUkgdQWK+1lNToWYitaV16ZT1cAsB/BQV3jlfLryzd6ZzqJmmDSxTaevOxiEh2KiSH6IGz1hJ2UkwP2yJqckZcoZ0XvDhLCvPyogjZAuuG68WkGIJpPii4r9W4XZHq8DyXZBFrzkzxb+AdYrmaT4nGA5ToYOg5bwtseMfOxcJwA12QMHQxJO8GnDScBivb0nGP3sFMtFKt+4mDGwHrAaUl5rQjiB7+m6el1zeuLVLNOXdi4veyq9aM3IFyHOc/UPX2XESLjJr7fk6wMUXFp8W22zhbc/m+3btH0wu9nbVHFzo8feolLXqq6IzEERWmIUL4cbJ5IvpHF6tCM5BwjwIDAQAB";
        X509EncodedKeySpec keySpec = new X509EncodedKeySpec(Base64.decodeBase64(pubKey));
        KeyFactory keyFactory = KeyFactory.getInstance("RSA");
        PublicKey publicKey = keyFactory.generatePublic(keySpec);

        cipher.init(Cipher.ENCRYPT_MODE, publicKey);
        byte[] bytes = cipher.doFinal("yg-chy".getBytes());
        String s = Base64.encodeBase64String(bytes);
        System.out.println(s);
    }

    /**
    * @Description //使用私钥进行解密
    * @Date    2022/5/13 14:06
    * @Param   [args]
    * @return  void
    */
    public  void decrypt() throws Exception{
        String priKey = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCodhSSB1BYr7WU1OhZiK1pXXplPVwCwH8FBXeOV8uvLN3pnOomaYNLFNp687GISHYqJIfogbPWEnZSTA/bImpyRlyhnRe8OEsK8/KiCNkC64brxaQYgmk+KLiv1bhdkerwPJdkEWvOTPFv4B1iuZpPicYDlOhg6DlvC2x4x87FwnADXZAwdDEk7wacNJwGK9vScY/ewUy0Uq37iYMbAesBpSXmtCOIHv6bp6XXN64tUs05d2Li97Kr1ozcgXIc5z9Q9fZcRIuMmvt+TrAxRcWnxbbbOFtz+b7du0fTC72dtUcXOjx96iUteqrojMQRFaYhQvhxsnki+kcXq0IzkHCPAgMBAAECggEACLCCkh+/dLunhaRP0eJ7c25ndFZsaxXr12H3T0fXEVOipLy71TxnEdXjCSmN1EZMlhLpUcRy9s1f/hG/VaHaVMetWobEZSiQMmHv94y2SPDGNl4s/zim3hZypFtFVcpDkJ3Hf1losq0EXS11xpRlUcn9BU1GiU0hPUmdEEPaNhgigPGT/nIw4kSGoW7ajk1DRC/dGDPeJl3VjzJE3o4+9scixN3wGpdBSvkXyj5aHpwR2xSnAMrWu5XJSNgNnTmnUQ/6NITYOfERcePw9dF8TXYB34KImiNCDrz4WCeRR3NSceYFYGm2FzYGCVmoPKR4ABJT1f1L59QRbhgFfca4EQKBgQDc7nKZa2iFC3T+aO9b1ARBg9P0dQ8MMGuOReFEw82ozB05oTGFbREQHvZTTv5L4EEKOQoDuQwzRT192XcMabd6km38wFVdYpAF5BDeAzy6UmW2KZvlnrIoq5S7qL2YxZNQTmosK+5TiogAez2X0YdVKXlA/ngM1AMlkaK1tCPy/wKBgQDDM4GETeknKU+OWzfsY/9sdRNrUf8Dku+mIBGTqXlvYRrohdNsDAhzOMXc3M1UchYUs4Y9/7aZdQXQhqs/Zexd9uOCrYmSceMFbtHhpYn2eW+nOCZacb7EuzeK1KAMnBw3cJd5SO1uIp4O7Z3Pa51DB+Su1Lfzb7hLbU/NhqPScQKBgFK9em26rAonoEknQ31Aidd/Z4HF1TzbZWyC/zqhmgP9bXSHyeQOVLWU4uuQSexgr/sEIZwDUW5iIAVhzBP6A50D+e0Omum+X/HU1/xNehDNiwoNyzTTmiVhHPKq31a3p9QLiffA/CCNYSHNBeQ1tFlQjvioVI15WTRYtncWX+BBAoGAHzYqHGyUvjVFyj5dp8epfL8PltZqjzi8ZvSzusebaiq9sbZMQvd9lmbahGEt17XSQAcgjONJYCos/tW5pg53B+NFJ4z19VuOcDzzBECC2c07BCLfRxDu7uf8jo9G9B02CctP/Q2jITwZx8tIs3TClYg6kZXjv+H6Nt1IqFVB9pECgYEAtZguA8iD6/ZM2Ly8/4WpwQUvmco2oDu7yCs+BdOQOvoRrQqhr6M3ILaktGVxaHN5Yft/TdAyi2WiiZ1BgfaNw1yM+iEIOGpGSuPfvZ8WoxwJLhSYbKh8M/8X1K0Nq4PdymrHRG7exVl5lQDieyNfSc0M73smkmZWhLztteAjApw=";
        PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(Base64.decodeBase64(priKey));
        KeyFactory keyFactory = KeyFactory.getInstance("RSA");
        PrivateKey privateKey = keyFactory.generatePrivate(keySpec);
        Cipher cipher = Cipher.getInstance("RSA");
        cipher.init(Cipher.DECRYPT_MODE, privateKey);
        String content = "FXdqPfAdU6L+eAwgyn03YPkkiARttQwkpp6T77km+aUaE4ye5mBGxcLkSqogldNOp7yYbvhrZyfFmpPWsdpzYn4NjAzEV0v88cBp0YkNUQFR6ckD3yRA/K2WH+I9H1Rgwuad82hmfp11K6fb3v08t89rsoltUMu51dUqeA48Tl2fAxr9lnalVNNltypsEF9F2C+zJFFXqNhPBTV/a2gvAimkDw2EH4Vo3aVNYLlgUtTH2PNaxjRo1ceqZjsSBKmren2KUnVoN7NXdKHKoDhPVReQT8uhcsDQm+qBZfZW6qicqvQBhZ9RIcLXWaBgNz8Vd40l4vTUyumjmOA2wc/0hw==";
        byte[] bytes = cipher.doFinal(Base64.decodeBase64(content));
        System.out.println(new String(bytes));
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值