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

Java安全加密

程序员文章站 2022-07-04 11:37:16
...
安全加密


目录
1 加密安全 1
1.1 应用的安全 1
1.2 密码学的分类 1
1.2.1 对称加密 1
1.2.2 非对称加密 2
1.2.3 单向加密 2
2 JAVA对安全支持 3



1 加密安全
1.1 应用的安全
“拿什么来保护你,我的应用?”这是几乎每一个应用系统都必须关注的问题。
答案是“给应用加锁!”。
锁如何加才够安全:
(1)访问控制:对用户上锁,如RBAC(Role Basic Access Control)基于用户角色的访问,数字签名等。
(2)数据加密:对数据上锁,如对称加密的数据存储,散列函数验证数据完整性等。

1.2 密码学的分类
为了应用的安全我们需要给应用加锁,加锁离不开密码学。

密码学在加密算法上大体可分为单向加密算法,对称加密算法和非对称加密算法三大类。MD5,SHA算法是单向加密算法的代表,单向加密算法是数据完整性验证的常用算法。DES算法是典型的对称加密算法的代表,对称加密算法是数据存储加密的常用算法。RSA算法是典型非对称加密算法,非对称加密算法是数据传输的常用算法,对称加密算法也可以用做数据传输加密,但非对称加密在秘钥管理方面更有优势。相对对称加密算法而言,非对称加密算法在安全级别上等级更高,但非对称加密算法在时间效率上远不如对称加密算法。

1.2.1 对称加密
对称密码算法(Symmetric Cipher):也称单钥密码算法或私钥密码算法。常见的如DES,AES算法。
对称密码体质要求加密与解密使用同一个共享秘钥,解密是加密的逆运算。
对称密码有两种:一种是对明文(或字节)进行运算,称为流密码,也称为序列密码;另一种是把明文信息划分成不同组(或块)机构,分别对每个组(或块)进行加密和解密,称为组密码。

(1) 流密码:流密码是军事,外交等机构部门中应用最为广泛的对称密码体重,同时也是手机应用平台最常用的加密手段。流密码是逐位加密和解密,加密和和解密可以是简单的运算,如模n运算。
流密码分为同步流密码和自同步流密码:

同步流密码:信息发送方和接收方在传递信息时,同步进行加密和解密操作,明文和密文一一对应,密文的内容如果在传输过程中被篡改,删除或插入,可导致同步失败,以致密文解密失败,必须通过重新同步来实现解密和恢复密文。在密文的传输过程中,如果一个密文位发生变化,那么该位的变化之影响该位的恢复,对后续密文位不影响,这是同步流密码的一个重要特点。

自同步流密码:与同步流密码相比,自同步流密码是一种有记忆变换的密码。每个秘钥与产生固定数量的位数有关,秘钥由生成的密文决定。在密文的传输过程中,如果一个密文位发生变换,那么该位的变化会影响到后续有限位(如n位)的密文位的正确解密。所以,自同步流密码有错误传递的现象。但是,在接收n位正确密文符后,密码自身会实现重新同步。基于着一特点,如果主动攻击方队密文做了修改,接收方仍然不能检测密文的完整性。与同步流密码相比,自同步流的密码分析更加困难,安全性更高。因此,自同步流密码具有自同步性,错误传递有限性,主动攻击性及明文统计扩散性四种特性。
目前使用较多流密码是自同步流密码,流密码的常用算法有RC4和SEAL等。

(2) 组密码:分组密码多应用于网络加密,是对称密码*中发展最为完善的密码*。分组密码是对固定长度的一组明文进行加密,这一固定长度称为分组长度。分组长度是分组密码的一个参数,它与分组算法的安全性成正比,其取值范围取决于应用环境。分组长度越长,密码分析越困难,安全性越高,分组长度越短,则越便于操作和运算,实用性越好。一般分组长度设置为56位,但随着密码学的发展,分组长度只有56位已经不能确保算法的安全性,目前分组密码多选择128位。
分组密码的加密过程是对一个分组长度n位的明文进行加密操作,相应产生一个n位密文分组,由此可见,不同的n位明文分组共有2的n次方个。分组加密算法有DES,AES等。

1.2.2 非对称加密
非对称密码算法(Asymmetric Cipher):也称双钥密码算法或公秘钥密码算法。常见的如RSA算法。
非对称密码体质的加密秘钥和解密秘钥不相同,分为两个秘钥,一个公开,一个保密,公开的秘钥称为公钥,保密的秘钥称为私钥。非对称密码体质使得发送者和接收者无秘钥传输的保密通信成为可能。一份消息的传递需要公钥和私钥共同参与,使用公要加密则需要私钥解密,反之私钥加密则需要公钥解密。

数字签名:在应用的安全中我们提到“对用户加锁”实现控制访问,这种加锁我们也可以通过数字签名来确保用户身份和数据认证。它是非对称密码的一种应用。常用的数字签名算法:DSA算法。

1.2.3 单向加密
单项加密算法有大名鼎鼎的MD5算法,散列函等。
散列函数也叫哈希函数,消息摘要。散列函数的主要作用不是完成数据加密与解密的工作,它是验证数据完整性的重要技术。通过散列函数可以为数据创建数字指纹(散列值:通常是一个短的随机字母和数字组成的字符串)。信息收发双方通信前已经协商了具体的散列算法,并且该算法是公开的。如果消息在传递的过程中被篡改,则该消息不能与已获得的数字指纹相匹配。常用的散列算法有:MD消息摘要算法,SHA安全散列算法,MAC消息认证算法。


2 JAVA对安全支持

Java在安全方面支持分为四个部分:
(1) JCA(Java Cryptography Architecture):提供了java基本加密框架,如证书,数字签名,消息摘要和秘钥对产生器等。JCA的实现主要在包java.security包(及其子包)中。
(2) JCE(Java Cryptography Extension):Java加密扩展包,JCE在JCA的基础上作了扩展,提供了各种加密算法,如消息摘要和秘钥管理功能,DES算法,AES算法,RSA算法,DSA算法等,JCE的实现主要在javax.crypto包(及其子包)中。
(3) JSSE(Java Secure Sockets Extension):java安全套接字扩展包,JSSE提供了基于SSL(Secure Sockets Layer,安全套接字层)的加密功能。保证了数据通信的安全。JSSE的实现主要在javax.net.ssl包中。
(4) JAAS(Java Authentication and Authentication service):java鉴别u安全服务,JAAS提供了java平台上进行用户身份鉴别的功能,如何提供一个符合标准安全机制的登录模块,通过配置的方式集成到各个系统中,这是由JAAS来提供的。

JCA和JCE是java平台提供的用于安全和加密服务的两组API,它们并不执行任何算法,只是连接应用和实际算法实现程序的一组接口。
加密算法涉及到很多重要领域,如国防军事等,所以根据美国出口限制规定,JCA可出口而JCE对部分国家限制出口,对于JCA加密Sun公司默认提供了一些包实现,对于JCE安全实现需要一些软件厂商提供JCE产品,软件开发商可以根据JCE接口(也叫安全提供者接口)将各种算法实现后,打包成一个provider(安全提供者)动态地加载到java运行环境中。如BouncyCastle JCE就是其中的一个安全提供者。
Java安全体系结构通过扩展的方式,加入更多的算法实现及相应的安全机制。
如进入java运行环境jre7\lib\security目录下,其中java.security文件中提供了安全提供者的配置信息:
security.provider.1=sun.security.provider.Sun
security.provider.2=sun.security.rsa.SunRsaSign
security.provider.3=sun.security.ec.SunEC
security.provider.4=com.sun.net.ssl.internal.ssl.Provider
security.provider.5=com.sun.crypto.provider.SunJCE
security.provider.6=sun.security.jgss.SunProvider
security.provider.7=com.sun.security.sasl.Provider
security.provider.8=org.jcp.xml.dsig.internal.dom.XMLDSigRI
security.provider.9=sun.security.smartcardio.SunPCSC
security.provider.10=sun.security.mscapi.SunMSCAPI


上述这些提供者均是provider(java.security.Provider)的子类。其中sun.security.provider.Sun是基本安全提供者,sun.security.rsa.SunRsaSign是实现RSA算法的提供者。
安全提供者实现了两个概念的抽象:引擎和算法,引擎可理解为操作,如加密,解密等,算法则是定义操作如何执行,如一个算法可以理解为一个引擎的具体实现。
java.security包中Provider类和Security类共同构成了安全提供者的概念。
运行代码:
Provider[] providers = Security.getProviders();
		
		for (Provider provider : providers) {
			System.out.println(provider.getName());
		}

输出结果:
SUN
SunRsaSign
SunEC
SunJSSE
SunJCE
SunJGSS
SunSASL
XMLDSig
SunPCSC
SunMSCAPI



****************************

未完待续