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
java各种加密算法_Java中的各种加密算法相关推荐
- java md5加密长度_java中使用MD5加密算法进行加密
java中使用MD5加密算法进行加密以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在各种应用系统的开发中 经常需要存储 ...
- java mod %区别_Java中 % 与Math.floorMod() 区别详解
%为取余(rem),Math.floorMod()为取模(mod) 取余取模有什么区别呢? 对于整型数a,b来说,取模运算或者取余运算的方法都是: 1.求 整数商: c = a/b; 2.计算模或者余 ...
- java show过时_Java中show() 方法被那个方法代替了? java编程 显示类中信
你说的show是swing里的吧,在老版本中Component这个超类确实有show这个方法,而且这个方法也相当有用,使一个窗口可见,并放到最前面.在jdk5.0中阻止了这个方法,普遍用setVisi ...
- java判断类型_Java中类型判断的几种方式 - 码农小胖哥 - 博客园
1. 前言 在Java这种强类型语言中类型转换.类型判断是经常遇到的.今天就细数一下Java中类型判断的方法方式. 2. instanceof instanceof是Java的一个运算符,用来判断一个 ...
- java 序列化实例_Java中的序列化与反序列化实例
创建的字节流与平台无关.因此,在一个平台上序列化的对象可以在另一个平台上反序列化. 为了使Java对象可序列化,我们实现java.io.Serializable可序列化接口. ObjectOutput ...
- java 数据类型分为_JAVA中分为基本数据类型及引用数据类型
byte:Java中最小的数据类型,在内存中占8位(bit),即1个字节,取值范围-128~127,默认值0 short:短整型,在内存中占16位,即2个字节,取值范围-32768~32717,默认值 ...
- java 代码锁_Java中的Lock锁
Lock锁介绍: 在java中可以使用 synchronized 来实现多线程下对象的同步访问,为了获得更加灵活使用场景.高效的性能,java还提供了Lock接口及其实现类ReentrantLock和 ...
- java wait 参数_java中wait()和join()方法的区别是什么
java中wait()和join()方法的区别是:存在不同的java包中:wait()方法用于线程间通信,它所施加的等待状态的线程可以被启动:join()方法用于在多个线程之间添加排序,它所施加的等待 ...
- java thread join()_Java中Thread.join()的使用方法
概要 本文分三个部分对thread.join()进行分析: 1. join() 的示例和作用 2. join() 源码分析 3. 对网上其他分析 join() 的文章提出疑问 1. join() 的示 ...
- java 锁定界面_Java中的锁
java中的锁遵循不同的分类方法,太多了,乐观锁/悲观锁,可重入锁/不可重入锁,有些第一遇到的话,可能还有点懵.刚好周末有时间学习下,总结和梳理下. 一总述 总的来说对java的锁有以下七种分类方法: ...
最新文章
- 【练习】c++删除链表倒数第K个结点和 插入排序算法将单链表递增排序
- VUE基本语法1-插值 属性绑定
- php中$_get和$_post如何使用,怎么使用超级全局变量$_POST与$_GET
- svn Error:Wrong committed revision number: -1。
- Table accessed during One order advanced search
- 浅谈数据结构-选择排序(简单、堆排序)
- kafka是如何通过配置的bootstrap.servers获取topic元数据的呢
- [转]项目管理有感之一 沟通
- 第2章[2.4] Ext JS的类与类体系
- 清华大学2016年软件学院攻读工程硕士专业学位研究生培养方案
- spark sql练习之join操作
- C语言关键字浅析-_Bool
- vue-pdf插件不翻页预览
- JQuery图片抽奖
- php ini_get,ini_get - [ php中文手册 ] - 在线原生手册 - php中文网
- 程序员,5个步骤改善你的英语阅读技能
- 西安电子科技大学-信号与线性系统大作业-歌曲人声消除
- rk3399 usbwifi 调试命令
- css发光js特效文字动画
- VMware12+Ubuntu16.04 安装 以及全屏的实现