欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java加密算法分享(rsa解密、对称加密、md5加密)

程序员文章站 2024-02-28 21:32:52
复制代码 代码如下:import java.io.unsupportedencodingexception;import java.security.invalidkeye...

复制代码 代码如下:

import java.io.unsupportedencodingexception;
import java.security.invalidkeyexception;
import java.security.messagedigest;
import java.security.nosuchalgorithmexception;
import java.security.privatekey;
import java.security.publickey;
import java.security.securerandom;

import javax.crypto.badpaddingexception;
import javax.crypto.cipher;
import javax.crypto.illegalblocksizeexception;
import javax.crypto.keygenerator;
import javax.crypto.nosuchpaddingexception;
import javax.crypto.secretkey;

import com.sun.mail.util.base64decoderstream;
import com.sun.mail.util.base64encoderstream;


public class util {
    /**
     * 传入名文和公钥钥对数据进行rsa解密
     * <br>返回值:string
     * <br>@param src
     * <br>@param pubkey
     * <br>@return
     */
    public static string rsaencoding(string src,publickey pubkey){
        try {
            cipher cip = cipher.getinstance("rsa");
            cip.init(cip.encrypt_mode, pubkey);
            byte[] by = cip.dofinal(src.getbytes());
            return new string(base64encoderstream.encode(by));

        } catch (nosuchalgorithmexception e) {
            throw new runtimeexception(e);
        } catch (nosuchpaddingexception e) {
            throw new runtimeexception(e);
        } catch (invalidkeyexception e) {
            throw new runtimeexception(e);
        } catch (illegalblocksizeexception e) {
            throw new runtimeexception(e);
        } catch (badpaddingexception e) {
            throw new runtimeexception(e);
        }

    }
    /**
     * 传入rsa密文和私钥对数据进行解密
     * <br>返回值:string
     * <br>@param sec
     * <br>@param privkey
     * <br>@return
     */
    public static string rsadeencoding(string sec,privatekey privkey){
        try {
            cipher cip = cipher.getinstance("rsa");
            cip.init(cip.decrypt_mode, privkey);
            byte[] by = base64decoderstream.decode(sec.getbytes());
            return new string(cip.dofinal(by));

        } catch (nosuchalgorithmexception e) {
            throw new runtimeexception(e);
        } catch (nosuchpaddingexception e) {
            throw new runtimeexception(e);
        } catch (invalidkeyexception e) {
            throw new runtimeexception(e);
        } catch (illegalblocksizeexception e) {
            throw new runtimeexception(e);
        } catch (badpaddingexception e) {
            throw new runtimeexception(e);
        }

    }

    /**
     * 传入字符串、密钥,并加密字符串(对称加密加密),支持:des、aes、desede(3des)
     * <br>返回值:string 密文
     * <br>@param src
     * <br>@param key
     * <br>@param method(des、aes、desede)
     * <br>@return
     */
    //对称加密加密
    public static string doubkeyencoding(string src,string keysrc,string method) {
        secretkey key;
        try {
            //生成密钥
            keygenerator kg =  keygenerator.getinstance(method);
            //初始化此密钥生成器。
            kg.init(new securerandom(keysrc.getbytes("utf-8")));
            key = kg.generatekey();

            //加密
            cipher ciph =  cipher.getinstance(method);
            ciph.init(cipher.encrypt_mode, key);
            ciph.update(src.getbytes("utf-8"));
            //使用64进行编码,一避免出现丢数据情景
            byte[] by = base64encoderstream.encode(ciph.dofinal());
            return new string(by);
        } catch (nosuchalgorithmexception e) {
            throw new runtimeexception(e);
        } catch (nosuchpaddingexception e) {
            throw new runtimeexception(e);
        } catch (invalidkeyexception e) {
            throw new runtimeexception(e);
        } catch (illegalblocksizeexception e) {
            throw new runtimeexception(e);
        } catch (badpaddingexception e) {
            throw new runtimeexception(e);
        } catch (unsupportedencodingexception e) {
            throw new runtimeexception(e);
        }
    }
    /**
     * 传入字符串、密钥、加密方式,并解密字符串(对称加密解密密),支持:des、aes、desede(3des)
     * <br>生成时间:2014年5月2日  下午1:12:13
     * <br>返回值:string 密钥原文
     * <br>@param sec
     * <br>@param key
     * <br>@param method(des、aes、desede)
     * <br>@return
     */
    public static string doubkeydencoding(string sec,string keysrc,string method) {
        secretkey key;
        try {
            //生成密钥
            keygenerator kg =  keygenerator.getinstance(method);
            //初始化此密钥生成器。
            kg.init(new securerandom(keysrc.getbytes("utf-8")));
            key = kg.generatekey();
            //加密
            cipher ciph =  cipher.getinstance(method);
            ciph.init(ciph.decrypt_mode, key);
            //使用64进行解码,一避免出现丢数据情景
            byte[] by = base64decoderstream.decode(sec.getbytes());
            ciph.update(by);
            return new string(ciph.dofinal());

        } catch (nosuchalgorithmexception e) {
            throw new runtimeexception(e);
        } catch (nosuchpaddingexception e) {
            throw new runtimeexception(e);
        } catch (invalidkeyexception e) {
            throw new runtimeexception(e);
        } catch (illegalblocksizeexception e) {
            throw new runtimeexception(e);
        } catch (badpaddingexception e) {
            throw new runtimeexception(e);
        } catch (unsupportedencodingexception e) {
            throw new runtimeexception(e);
        }
    }

    /**
     * 单向信息加密(信息摘要),支持:md5、md2、sha(sha-1,sha1)、sha-256、sha-384、sha-512,
     * <br>返回值:string         加密后的密文
     * <br>@param src     传入加密字符串(明文)
     * <br>@param method  指定算法(md5、md2、sha(sha-1,sha1)、sha-256、sha-384、sha-512)
     * <br>@return
     */
    public static string ecodingpasswd(string src,string method){

        try {
            //信息摘要算法
            messagedigest md5 = messagedigest.getinstance(method);
            md5.update(src.getbytes());
            byte[] encoding = md5.digest();
            //使用64进行编码,一避免出现丢数据情景
            return new string(base64encoderstream.encode(encoding));
        } catch (nosuchalgorithmexception e) {
            throw new runtimeexception(e+"加密失败!!");
        }

    }
}