java中的加解密操作

      java中,加解密方式有五种,Base64、消息摘要、对称加密、非对称加密、数字签名。

   消息摘要加密有两种算法:MD和SHA

   对称加密有四种算法:DES、3DES、AES、PBE

   非对称加密有两种算法:DH、RSA

   数字签名有三种算法:RSA、DSA、ECDSA

    

   

public class EncodeUtil {
    /**
     * Base64
     * @param code
     * @return
     */
    public static String base64Encode(String code){
        byte[] encode=null;
        //bc
        encode =org.bouncycastle.util.encoders.Base64.encode(code.getBytes());
        //cc
       encode=Base64.encodeBase64(code.getBytes());
        return new String(encode);

    }

    /***
     * MD5
     * @param code
     * @return
     */
    public static String md5Encode(String code){
        byte[] md5Encode = null;
        //jdk
        try {
            MessageDigest md = MessageDigest.getInstance("MD5");
            md5Encode=md.digest(code.getBytes());
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        //bc
        MD5Digest digest = new MD5Digest();
        digest.update(code.getBytes(),0,code.getBytes().length);
        md5Encode=new byte[digest.getDigestSize()];
        digest.doFinal(md5Encode,0);
        //cc
        md5Encode =DigestUtils.md5(code.getBytes());
        return Hex.encodeHexString(md5Encode);
    }

    /**
     * SHA
     * @param code
     * @return
     */
    public static String shaEncode(String code){
        byte[] shaEncode=null;
        //jdk
        try {
            MessageDigest messageDigest=MessageDigest.getInstance("SHA");
           shaEncode=messageDigest.digest(code.getBytes());
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        //bc
        Digest digest = new SHA1Digest();
        digest.update(code.getBytes(),0,code.getBytes().length);
        shaEncode = new byte[digest.getDigestSize()];
        digest.doFinal(shaEncode,0);
        //cc
        shaEncode =DigestUtils.sha1(code);
        return Hex.encodeHexString(shaEncode);
    }
    /***
     * 对称加密
     * 第一步:生成Key
     * 第二步:转换Key
     * 第三步:加解密的操作
     */
   public static String desEncode(String code){
       byte[] desEncode=null;
       try {
           //jdk
           //生成Key
           KeyGenerator keygenerator=KeyGenerator.getInstance("DES");
           keygenerator.init(56);
           SecretKey secretKey=keygenerator.generateKey();
           byte[] byteKey=secretKey.getEncoded();

           //Key的转换
           DESKeySpec desKetSpec= new DESKeySpec(byteKey);
           SecretKeyFactory secretKeyFactory=SecretKeyFactory.getInstance("DES");
           Key convertKey=secretKeyFactory.generateSecret(desKetSpec);

           //加密
           Cipher cipher=Cipher.getInstance("DES/ECB/PKCSPadding");
           cipher.init(Cipher.ENCRYPT_MODE,convertKey);
           desEncode=cipher.doFinal(code.getBytes());
       } catch (NoSuchAlgorithmException e) {
           e.printStackTrace();
       } catch (InvalidKeyException e) {
           e.printStackTrace();
       } catch (InvalidKeySpecException e) {
           e.printStackTrace();
       } catch (NoSuchPaddingException e) {
           e.printStackTrace();
       } catch (BadPaddingException e) {
           e.printStackTrace();
       } catch (IllegalBlockSizeException e) {
           e.printStackTrace();
       }
       return Hex.encodeHexString(desEncode);
   }
    public static String threedesEncode(String code){
        byte[] desEncode=null;
        try {
            //jdk
            //生成Key
            KeyGenerator keygenerator=KeyGenerator.getInstance("DESede");
            keygenerator.init(168);
            SecretKey secretKey=keygenerator.generateKey();
            byte[] byteKey=secretKey.getEncoded();

            //Key的转换
            DESedeKeySpec desKetSpec= new DESedeKeySpec(byteKey);
            SecretKeyFactory secretKeyFactory=SecretKeyFactory.getInstance("DESede");
            Key convertKey=secretKeyFactory.generateSecret(desKetSpec);

            //加密
            Cipher cipher=Cipher.getInstance("DESede/ECB/PKCSPadding");
            cipher.init(Cipher.ENCRYPT_MODE,convertKey);
            desEncode=cipher.doFinal(code.getBytes());
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (InvalidKeyException e) {
            e.printStackTrace();
        } catch (InvalidKeySpecException e) {
            e.printStackTrace();
        } catch (NoSuchPaddingException e) {
            e.printStackTrace();
        } catch (BadPaddingException e) {
            e.printStackTrace();
        } catch (IllegalBlockSizeException e) {
            e.printStackTrace();
        }
        return Hex.encodeHexString(desEncode);
    }
    public static String aesEncode(String code){
        byte[] aesEncode=null;
        //jdk
        try {
            //生成Key
            KeyGenerator keyGenerator=KeyGenerator.getInstance("AES");
            keyGenerator.init(new SecureRandom());
            SecretKey secretKey=keyGenerator.generateKey();
            byte[] keyByte=secretKey.getEncoded();

            //key的转换
            Key key = new SecretKeySpec(keyByte,"AES");

            //加密
            Cipher cipher=Cipher.getInstance("AES/ECB/PKS5Padding");
            cipher.init(Cipher.ENCRYPT_MODE,key);
            aesEncode=cipher.doFinal(code.getBytes());
        } 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 Hex.encodeHexString(aesEncode);
    }
    public static String pbeEncoder(String code){
        byte[] pbeEncode=null;
        try {
            //jdk
            //初始化盐
            SecureRandom secureRam = new SecureRandom();
            byte[] salt = secureRam.generateSeed(8);

            //口令与密钥
            String password="123456";
            PBEKeySpec pbeKeySpec= new PBEKeySpec(password.toCharArray());
            SecretKeyFactory factory =SecretKeyFactory.getInstance("PBEWITHMD5andDES");

            //生成Key
            Key key=factory.generateSecret(pbeKeySpec);

            //加密
            PBEParameterSpec pbeParameterSpec= new PBEParameterSpec(salt,100);
            Cipher cipher = Cipher.getInstance("PBEWITHMD5andAES");
            cipher.init(Cipher.ENCRYPT_MODE,key,pbeParameterSpec);
            pbeEncode =cipher.doFinal(code.getBytes());
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (InvalidKeySpecException e) {
            e.printStackTrace();
        } catch (NoSuchPaddingException e) {
            e.printStackTrace();
        } catch (InvalidKeyException e) {
            e.printStackTrace();
        } catch (BadPaddingException e) {
            e.printStackTrace();
        } catch (IllegalBlockSizeException e) {
            e.printStackTrace();
        } catch (InvalidAlgorithmParameterException e) {
            e.printStackTrace();
        }
        return Hex.encodeHexString(pbeEncode);
    }
    /***
     * 非对称加密。
     * 第一步:发送方生成sendPublicKeyEnc
     * 第二步:接收方根据发送方的sendPublicKeyEnc构建自己的本地密钥以及receiverPublicKeyEnc
     * 第三步:发送方根据接收方的receiverPublicKeyEnc构建自己的本地密钥
     */
    public static String dhEncoder(String code){
        byte[] dhEncoder=null;
        try {
            //初始化发送方sendPublicKeyEnc。
            KeyPairGenerator sendKeyPairGenerator=KeyPairGenerator.getInstance("DH");
            sendKeyPairGenerator.initialize(512);
            KeyPair sendKeyPair = sendKeyPairGenerator.genKeyPair();
            byte[] sendPublicKeyEnc= sendKeyPair.getPublic().getEncoded();

            //解析发送方的PublicKeyEnc
            KeyFactory receiveKeyFactory= KeyFactory.getInstance("DH");
            X509EncodedKeySpec x509EncoderKeySpec=new X509EncodedKeySpec(sendPublicKeyEnc);
            PublicKey receiverPublicKey = receiveKeyFactory.generatePublic(x509EncoderKeySpec);
            DHParameterSpec dhParameterSpec=((DHPublicKey)receiverPublicKey).getParams();
            KeyPairGenerator receiverKeyPairGenerator = KeyPairGenerator.getInstance("DH");
            receiverKeyPairGenerator.initialize(dhParameterSpec);
            KeyPair receiverKeyPair = receiverKeyPairGenerator.generateKeyPair();

            //密钥构建以及生成receiverPublicKeyEnc
            KeyAgreement receiverKeyAgreement=KeyAgreement.getInstance("DH");
            PrivateKey receiverPrivateKey=receiverKeyPair.getPrivate();
            receiverKeyAgreement.init(receiverPrivateKey);
            receiverKeyAgreement.doPhase(receiverPublicKey, true);
            SecretKey receiverDesKey = receiverKeyAgreement.generateSecret("DES");
            byte[] receiverPublicKeyEnc = receiverKeyPair.getPublic().getEncoded();

            //发送方收到接收方的receiverPublicKeyEnc,生成自己的本地密钥
            KeyFactory sendKeyFactory = KeyFactory.getInstance("DH");
            x509EncoderKeySpec=new X509EncodedKeySpec(receiverPublicKeyEnc);
            PublicKey sendPublicKey = sendKeyFactory.generatePublic(x509EncoderKeySpec);
            KeyAgreement sendKeyAgreement = KeyAgreement.getInstance("DH");
            sendKeyAgreement.init(sendKeyPair.getPrivate());
            sendKeyAgreement.doPhase(sendPublicKey, true);
            //发送方本地密钥
            SecretKey sendDesKey=sendKeyAgreement.generateSecret("DES");

            //加密
            Cipher cipher = Cipher.getInstance("DES");
            cipher.init(Cipher.ENCRYPT_MODE,sendDesKey);
            dhEncoder=cipher.doFinal(code.getBytes());
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (InvalidKeySpecException e) {
            e.printStackTrace();
        } catch (InvalidAlgorithmParameterException e) {
            e.printStackTrace();
        } catch (InvalidKeyException e) {
            e.printStackTrace();
        } catch (NoSuchPaddingException e) {
            e.printStackTrace();
        } catch (BadPaddingException e) {
            e.printStackTrace();
        } catch (IllegalBlockSizeException e) {
            e.printStackTrace();
        }
        return Hex.encodeHexString(dhEncoder);
    }
    public static String rsaEncoder(String code){
        byte[] rsaEncoder=null;
        //jdk
        try {
            //初始化密钥
            KeyPairGenerator keyPairGrnerator=KeyPairGenerator.getInstance("RSA");
            keyPairGrnerator.initialize(512);
            KeyPair keyPair = keyPairGrnerator.generateKeyPair();
            RSAPublicKey rsaPublicKey = (RSAPublicKey) keyPair.getPublic();
            RSAPrivateKey rsaPrivateKey = (RSAPrivateKey) keyPair.getPrivate();

            //私钥加密,公钥解密----加密
            PKCS8EncodedKeySpec pkcs8EncodedKeySpec=new PKCS8EncodedKeySpec(rsaPrivateKey.getEncoded());
            KeyFactory keyFactory=KeyFactory.getInstance("RSA");
            PrivateKey privateKey=keyFactory.generatePrivate(pkcs8EncodedKeySpec);
            Cipher cipher = Cipher.getInstance("RSA");
            cipher.init(Cipher.ENCRYPT_MODE,privateKey);
            rsaEncoder = cipher.doFinal(code.getBytes());

            //私钥加密,公钥解密----解密
            X509EncodedKeySpec x509EncodedKeySpec= new X509EncodedKeySpec(rsaPublicKey.getEncoded());
            keyFactory = KeyFactory.getInstance("RSA");
            PublicKey publicKey=keyFactory.generatePublic(x509EncodedKeySpec);
            cipher=Cipher.getInstance("RSA");
            cipher.init(Cipher.DECRYPT_MODE, publicKey);
            rsaEncoder =cipher.doFinal(rsaEncoder);

            //公钥加密,私钥解密----加密
            x509EncodedKeySpec= new X509EncodedKeySpec(rsaPublicKey.getEncoded());
            keyFactory = KeyFactory.getInstance("RSA");
            publicKey = keyFactory.generatePublic(x509EncodedKeySpec);
            cipher=Cipher.getInstance("RSA");
            cipher.init(Cipher.ENCRYPT_MODE,publicKey);
            rsaEncoder=cipher.doFinal(code.getBytes());
            //公钥加密,私钥解密----解密
            pkcs8EncodedKeySpec=new PKCS8EncodedKeySpec(rsaPrivateKey.getEncoded());
            keyFactory=KeyFactory.getInstance("RSA");
            privateKey=keyFactory.generatePrivate(pkcs8EncodedKeySpec);
            cipher = Cipher.getInstance("RSA");
            cipher.init(Cipher.DECRYPT_MODE,privateKey);
            rsaEncoder = cipher.doFinal(rsaEncoder);
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (InvalidKeySpecException e) {
            e.printStackTrace();
        } catch (NoSuchPaddingException e) {
            e.printStackTrace();
        } catch (InvalidKeyException e) {
            e.printStackTrace();
        } catch (BadPaddingException e) {
            e.printStackTrace();
        } catch (IllegalBlockSizeException e) {
            e.printStackTrace();
        }
        return Hex.encodeHexString(rsaEncoder);
    }
    /***
     * 数字签名算法 RSA DSA ECDSA
     */
    public static String signRsaEncoder(String code){
        byte[] signRsaEncode=null;
        try {
            //jdk
            //初始化密钥
            KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
            keyPairGenerator.initialize(512);
            KeyPair keyPair = keyPairGenerator.generateKeyPair();
            RSAPublicKey rsaPublicKey = (RSAPublicKey) keyPair.getPublic();
            RSAPrivateKey rsaPrivateKey= (java.security.interfaces.RSAPrivateKey) keyPair.getPrivate();

            //执行私钥签名
            PKCS8EncodedKeySpec pkcS8EncodedKeySpec=new PKCS8EncodedKeySpec(rsaPrivateKey.getEncoded());
            KeyFactory keyFactory=KeyFactory.getInstance("RSA");
            PrivateKey privateKey=keyFactory.generatePrivate(pkcS8EncodedKeySpec);
            Signature signature= Signature.getInstance("MD5withRSA");
            signature.initSign(privateKey);
            signature.update(code.getBytes());
            signRsaEncode=signature.sign();

            //公钥验证签名
            X509EncodedKeySpec x509EncodedKeySpec=new X509EncodedKeySpec(rsaPublicKey.getEncoded());
            keyFactory = KeyFactory.getInstance("RSA");
            PublicKey publicKey=keyFactory.generatePublic(x509EncodedKeySpec);
            signature = Signature.getInstance("MD5withRSA");
            signature.initVerify(publicKey);
            signature.update(code.getBytes());
            boolean isTrue =signature.verify(signRsaEncode);
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (InvalidKeySpecException e) {
            e.printStackTrace();
        } catch (InvalidKeyException e) {
            e.printStackTrace();
        } catch (SignatureException e) {
            e.printStackTrace();
        }
        return Hex.encodeHexString(signRsaEncode);
    }
    public static String signDsaEncode(String code){
        byte[] signDsaEncode=null;
        try {
            //初始化密钥
            KeyPairGenerator keyPairGenerator=KeyPairGenerator.getInstance("DSA");
            keyPairGenerator.initialize(512);
            KeyPair keyPair=keyPairGenerator.generateKeyPair();
            DSAPublicKey dsaPublicKey= (DSAPublicKey) keyPair.getPublic();
            DSAPrivateKey dsaPrivateKey= (DSAPrivateKey) keyPair.getPrivate();
            //执行签名
            PKCS8EncodedKeySpec pkcS8EncodedKeySpec=new PKCS8EncodedKeySpec(dsaPrivateKey.getEncoded());
            KeyFactory keyFactory=KeyFactory.getInstance("DSA");
            PrivateKey privateKey=keyFactory.generatePrivate(pkcS8EncodedKeySpec);
            Signature signnatrue=Signature.getInstance("SHA1withDSA");
            signnatrue.initSign(privateKey);
            signnatrue.update(code.getBytes());
            signDsaEncode=signnatrue.sign();
            //验证签名
            X509EncodedKeySpec x509EncodedKeySpec=new X509EncodedKeySpec(dsaPublicKey.getEncoded());
            keyFactory = KeyFactory.getInstance("DSA");
            PublicKey publicKey=keyFactory.generatePublic(x509EncodedKeySpec);
            signnatrue = Signature.getInstance("SHA1withDSA");
            signnatrue.initVerify(publicKey);
            signnatrue.update(code.getBytes());
            boolean isTrue =signnatrue.verify(signDsaEncode);
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (InvalidKeySpecException e) {
            e.printStackTrace();
        } catch (InvalidKeyException e) {
            e.printStackTrace();
        } catch (SignatureException e) {
            e.printStackTrace();
        }
        return Hex.encodeHexString(signDsaEncode);
    }
    public static String signEcDsaEncode(String code){
        byte[] signEcDsaEncode=null;
        try {
            //初始化密钥
            KeyPairGenerator keyPairGenerator=KeyPairGenerator.getInstance("DSA");
            keyPairGenerator.initialize(512);
            KeyPair keyPair=keyPairGenerator.generateKeyPair();
            ECPublicKey ecPublicKey= (ECPublicKey) keyPair.getPublic();
            ECPrivateKey ecPrivateKey= (ECPrivateKey) keyPair.getPrivate();
            //执行签名
            PKCS8EncodedKeySpec pkcS8EncodedKeySpec=new PKCS8EncodedKeySpec(ecPrivateKey.getEncoded());
            KeyFactory keyFactory=KeyFactory.getInstance("EC");
            PrivateKey privateKey=keyFactory.generatePrivate(pkcS8EncodedKeySpec);
            Signature signnatrue=Signature.getInstance("SHA1withECDSA");
            signnatrue.initSign(privateKey);
            signnatrue.update(code.getBytes());
            signEcDsaEncode=signnatrue.sign();
            //验证签名
            X509EncodedKeySpec x509EncodedKeySpec=new X509EncodedKeySpec(ecPublicKey.getEncoded());
            keyFactory = KeyFactory.getInstance("EC");
            PublicKey publicKey=keyFactory.generatePublic(x509EncodedKeySpec);
            signnatrue = Signature.getInstance("SHA1withECDSA");
            signnatrue.initVerify(publicKey);
            signnatrue.update(code.getBytes());
            boolean isTrue =signnatrue.verify(signEcDsaEncode);
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (InvalidKeySpecException e) {
            e.printStackTrace();
        } catch (InvalidKeyException e) {
            e.printStackTrace();
        } catch (SignatureException e) {
            e.printStackTrace();
        }
        return Hex.encodeHexString(signEcDsaEncode);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值