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中的各种加密算法相关推荐

  1. java md5加密长度_java中使用MD5加密算法进行加密

    java中使用MD5加密算法进行加密以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在各种应用系统的开发中 经常需要存储 ...

  2. java mod %区别_Java中 % 与Math.floorMod() 区别详解

    %为取余(rem),Math.floorMod()为取模(mod) 取余取模有什么区别呢? 对于整型数a,b来说,取模运算或者取余运算的方法都是: 1.求 整数商: c = a/b; 2.计算模或者余 ...

  3. java show过时_Java中show() 方法被那个方法代替了? java编程 显示类中信

    你说的show是swing里的吧,在老版本中Component这个超类确实有show这个方法,而且这个方法也相当有用,使一个窗口可见,并放到最前面.在jdk5.0中阻止了这个方法,普遍用setVisi ...

  4. java判断类型_Java中类型判断的几种方式 - 码农小胖哥 - 博客园

    1. 前言 在Java这种强类型语言中类型转换.类型判断是经常遇到的.今天就细数一下Java中类型判断的方法方式. 2. instanceof instanceof是Java的一个运算符,用来判断一个 ...

  5. java 序列化实例_Java中的序列化与反序列化实例

    创建的字节流与平台无关.因此,在一个平台上序列化的对象可以在另一个平台上反序列化. 为了使Java对象可序列化,我们实现java.io.Serializable可序列化接口. ObjectOutput ...

  6. java 数据类型分为_JAVA中分为基本数据类型及引用数据类型

    byte:Java中最小的数据类型,在内存中占8位(bit),即1个字节,取值范围-128~127,默认值0 short:短整型,在内存中占16位,即2个字节,取值范围-32768~32717,默认值 ...

  7. java 代码锁_Java中的Lock锁

    Lock锁介绍: 在java中可以使用 synchronized 来实现多线程下对象的同步访问,为了获得更加灵活使用场景.高效的性能,java还提供了Lock接口及其实现类ReentrantLock和 ...

  8. java wait 参数_java中wait()和join()方法的区别是什么

    java中wait()和join()方法的区别是:存在不同的java包中:wait()方法用于线程间通信,它所施加的等待状态的线程可以被启动:join()方法用于在多个线程之间添加排序,它所施加的等待 ...

  9. java thread join()_Java中Thread.join()的使用方法

    概要 本文分三个部分对thread.join()进行分析: 1. join() 的示例和作用 2. join() 源码分析 3. 对网上其他分析 join() 的文章提出疑问 1. join() 的示 ...

  10. java 锁定界面_Java中的锁

    java中的锁遵循不同的分类方法,太多了,乐观锁/悲观锁,可重入锁/不可重入锁,有些第一遇到的话,可能还有点懵.刚好周末有时间学习下,总结和梳理下. 一总述 总的来说对java的锁有以下七种分类方法: ...

最新文章

  1. 【练习】c++删除链表倒数第K个结点和 插入排序算法将单链表递增排序
  2. VUE基本语法1-插值 属性绑定
  3. php中$_get和$_post如何使用,怎么使用超级全局变量$_POST与$_GET
  4. svn Error:Wrong committed revision number: -1。
  5. Table accessed during One order advanced search
  6. 浅谈数据结构-选择排序(简单、堆排序)
  7. kafka是如何通过配置的bootstrap.servers获取topic元数据的呢
  8. [转]项目管理有感之一 沟通
  9. 第2章[2.4] Ext JS的类与类体系
  10. 清华大学2016年软件学院攻读工程硕士专业学位研究生培养方案
  11. spark sql练习之join操作
  12. C语言关键字浅析-_Bool
  13. vue-pdf插件不翻页预览
  14. JQuery图片抽奖
  15. php ini_get,ini_get - [ php中文手册 ] - 在线原生手册 - php中文网
  16. 程序员,5个步骤改善你的英语阅读技能
  17. 西安电子科技大学-信号与线性系统大作业-歌曲人声消除
  18. rk3399 usbwifi 调试命令
  19. css发光js特效文字动画
  20. VMware12+Ubuntu16.04 安装 以及全屏的实现

热门文章

  1. OpenCasCade——将鼠标点的位置转换为基于OCC三维坐标系中在某一面上的坐标
  2. 读书书签-《高等应用数学问题的MATLAB求解》第三版,薛定宇 陈阳泉著
  3. Mac 脚本编辑器(AppleScript)如何使用录制功能
  4. VC知识库文档中心嵌入开发WinCE 里面不少写的很好的WinCE的文章
  5. Android 11源码下载和编译
  6. Golang语言编程规范
  7. hbase java客户端_【HBase教程】(八)HBase JAVA 客户端API使用
  8. 冒泡排序-C语言版(带图详细)
  9. C语言实现简单小游戏
  10. 以python项目为例的Pyinstaller打包详细教程