java各种加密算法_Java中的各种加密算法

JAVA中为我们提供了丰富的加密技术,可以基本的分为单向加密和非对称加密

1.单向加密算法

单向加密算法主要用来验证数据传输的过程中,是否被篡改过。

BASE64 严格地说,属于编码格式,而非加密算法

MD5(Message Digest algorithm 5,信息摘要算法)

SHA(Secure Hash Algorithm,安全散列算法)

HMAC(Hash Message Authentication Code,散列消息鉴别码

2.对称和非对称加密算法

对称和非对称加密算法主要采用公钥和私钥的形式,来对数据加密。

DES(Data Encryption Standard,数据加密算法)

PBE(Password-based encryption,基于密码验证)

RSA(算法的名字以发明者的名字命名:Ron Rivest, AdiShamir 和Leonard Adleman)

DH(Diffie-Hellman算法,密钥一致协议)

DSA(Digital Signature Algorithm,数字签名)

ECC(Elliptic Curves Cryptography,椭圆曲线密码编码学)

更多理论的简介,请自行查阅,下面提供代码,来看一下。

基础加密

[java]view

plaincopy

packagecom.test;

importjava.security.MessageDigest;

importjavax.crypto.KeyGenerator;

importjavax.crypto.Mac;

importjavax.crypto.SecretKey;

importjavax.crypto.spec.SecretKeySpec;

importsun.misc.BASE64Decoder;

importsun.misc.BASE64Encoder;

/**

*@ClassName:coder

*@Description:加密组件

*@author:LUCKY

*@date:2016年1月4日下午1:24:12

*/

publicabstractclasscoder{

publicstaticfinalStringKEY_SHA="SHA";

publicstaticfinalStringKEY_MD5="MD5";

/**

*MAC算法可选以下多种算法

*

*

 
 

*HmacMD5

*HmacSHA1

*HmacSHA256

*HmacSHA384

*HmacSHA512

*

*/

publicstaticfinalStringKEY_MAC="HmacMD5";

/**

*BASE64解密

*

*@paramkey

*@return

*@throwsException

*/

publicstaticbyte[]decryptBASE64(Stringkey)throwsException{

return(newBASE64Decoder()).decodeBuffer(key);

}

/**

*BASE64加密

*

*@paramkey

*@return

*@throwsException

*/

publicstaticStringencryptBASE64(byte[]key)throwsException{

return(newBASE64Encoder()).encodeBuffer(key);

}

/**

*MD5加密

*

*@paramdata

*@return

*@throwsException

*/

publicstaticbyte[]encryptMD5(byte[]data)throwsException{

MessageDigestmd5=MessageDigest.getInstance(KEY_MD5);

md5.update(data);

returnmd5.digest();

}

/**

*SHA加密

*

*@paramdata

*@return

*@throwsException

*/

publicstaticbyte[]encryptSHA(byte[]data)throwsException{

MessageDigestsha=MessageDigest.getInstance(KEY_SHA);

sha.update(data);

returnsha.digest();

}

/**

*初始化HMAC密钥

*

*@return

*@throwsException

*/

publicstaticStringinitMacKey()throwsException{

KeyGeneratorkeyGenerator=KeyGenerator.getInstance(KEY_MAC);

SecretKeysecretKey=keyGenerator.generateKey();

returnencryptBASE64(secretKey.getEncoded());

}

/**

*HMAC加密

*

*@paramdata

*@paramkey

*@return

*@throwsException

*/

publicstaticbyte[]encryptHMAC(byte[]data,Stringkey)throwsException{

SecretKeysecretKey=newSecretKeySpec(decryptBASE64(key),KEY_MAC);

Macmac=Mac.getInstance(secretKey.getAlgorithm());

mac.init(secretKey);

returnmac.doFinal(data);

}

}

RSA安全编码组件

[java]view

plaincopy

packagecom.test;

importjava.security.Key;

importjava.security.KeyFactory;

importjava.security.KeyPair;

importjava.security.KeyPairGenerator;

importjava.security.PrivateKey;

importjava.security.PublicKey;

importjava.security.Signature;

importjava.security.interfaces.RSAPrivateKey;

importjava.security.interfaces.RSAPublicKey;

importjava.security.spec.PKCS8EncodedKeySpec;

importjava.security.spec.X509EncodedKeySpec;

importjava.util.HashMap;

importjava.util.Map;

importjavax.crypto.Cipher;

/**

*@ClassName:RSACoder

*@Description:RSA安全编码组件

*@author:LUCKY

*@date:2016年1月4日下午1:25:34

*/

publicabstractclassRSACoderextendscoder{

publicstaticfinalStringKEY_ALGORITHM="RSA";

publicstaticfinalStringSIGNATURE_ALGORITHM="MD5withRSA";

privatestaticfinalStringPUBLIC_KEY="RSAPublicKey";

privatestaticfinalStringPRIVATE_KEY="RSAPrivateKey";

/**

*用私钥对信息生成数字签名

*

*@paramdata

*加密数据

*@paramprivateKey

*私钥

*

*@return

*@throwsException

*/

publicstaticStringsign(byte[]data,StringprivateKey)throwsException{

//解密由base64编码的私钥

byte[]keyBytes=decryptBASE64(privateKey);

//构造PKCS8EncodedKeySpec对象

PKCS8EncodedKeySpecpkcs8KeySpec=newPKCS8EncodedKeySpec(keyBytes);

//KEY_ALGORITHM指定的加密算法

KeyFactorykeyFactory=KeyFactory.getInstance(KEY_ALGORITHM);

//取私钥匙对象

PrivateKeypriKey=keyFactory.generatePrivate(pkcs8KeySpec);

//用私钥对信息生成数字签名

Signaturesignature=Signature.getInstance(SIGNATURE_ALGORITHM);

signature.initSign(priKey);

signature.update(data);

return

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值