`
xmong
  • 浏览: 264162 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论
阅读更多
安全加密


目录
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



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

未完待续



分享到:
评论

相关推荐

    第三节(Java安全加密).zip

    在Java开发中,安全加密是不可或缺的一个环节,它涉及到数据的保护、用户隐私的安全以及网络通信的可靠...视频教程"第三节(Java安全加密)"将深入浅出地讲解这些概念和技术,帮助开发者提升在实际项目中的安全编码能力。

    基于Java实现的同态加密算法的实现

    通过研究这些代码,我们可以深入了解如何在实际应用中利用Java来构建安全的同态加密系统。 在实际开发过程中,需要注意性能和效率的问题,因为同态加密通常比传统的对称加密或非同态加密算法更为复杂,可能会消耗更...

    JAVA数据加密解密的实例

    Java作为一种广泛使用的编程语言,提供了丰富的工具和库来实现数据的加密和解密。本实例将聚焦于JAVA数据加密解密的实践应用。 首先,让我们理解加密和解密的基本概念。加密是一种将明文(可读信息)转化为密文(不...

    java加密狗读取例子

    Java加密狗读取例子主要涉及的是在Java编程环境中与硬件加密设备进行交互的技术。加密狗是一种硬件安全模块,用于保护软件免受非法复制和逆向工程。在这个特定的例子中,我们关注的是ET199型号的加密狗,它通常被...

    JAVA文件加密打包实例

    在Java编程领域,文件加密和打包是常见的需求,特别是在数据安全和软件分发方面。本文将深入探讨如何在Java中实现文件的加密和打包,基于提供的"JAVA文件加密打包实例"进行详细讲解。 首先,我们要了解文件加密的...

    基于jvmti 的Java 代码加密

    Java代码加密是保护知识产权的重要手段,特别是在开源软件盛行的今天,源码安全显得尤为重要。本文将深入探讨基于jvmti(Java Virtual Machine Tool Interface)技术实现的Java代码加密方法,以及如何在Tomcat和...

    java AES加密 解决加密过长非法异常问题

    在Java编程语言中,AES(Advanced Encryption ...同时,熟悉字符串和字节数组的转换,以及密钥和`Cipher`对象的创建和使用,也是实现安全加密的重要步骤。通过分析给定的源代码,你可以学习到这些实际操作的细节。

    JCT - java加密解密工具包.zip_Java加密_java 加密_jct java_加密 解密_加密工具

    Java加密解密工具包,通常用于保护敏感数据的安全,防止未经授权的访问或篡改。这个名为"JCT"的工具包提供了丰富的功能,使得开发者在Java应用中集成加密和解密操作变得更加简单。下面我们将详细探讨Java加密的相关...

    JAVAclass加密工具

    总之,"JAVAclass加密工具2.2"是Java开发者保护代码安全的一个有效工具,通过加密手段,它可以帮助开发者防范源代码泄露,提升软件的安全性和保密性。然而,它也需要与良好的编程实践和版本控制策略相结合,才能达到...

    Java RSA加密前后端实现

    Java RSA加密技术是一种广泛应用于网络通信安全中的非对称加密算法,主要特点是公钥和私钥成对出现,其中公钥用于加密,私钥用于解密。这种加密方式的安全性较高,因为即使加密数据被截获,没有相应的私钥也无法解密...

    Java实现url加密处理的方法示例

    Java中的URL加密处理是网络安全传输数据的一个重要环节,它可以防止敏感信息在传输过程中被窃取或篡改。本文将深入探讨如何使用Java实现URL加密,特别是基于Base64编码和编码转换的方式。我们将重点关注以下几个方面...

    用Java实现的图片加密程序

    以上就是关于"用Java实现的图片加密程序"的一些主要知识点,这个项目不仅涉及了Java的IO流技术,还涵盖了加密算法、数据安全等多个方面,对于学习和提升Java编程技能以及信息安全知识非常有帮助。

    java Md5加密方法 java Md5加密方法 java Md5加密方法

    java Md5加密方法 java Md5加密方法 java Md5加密方法 java Md5加密方法 java Md5加密方法 java Md5加密方法 java Md5加密方法 java Md5加密方法 java Md5加密方法 java Md5加密方法 java Md5加密方法 java Md5加密...

    (Java密码加密)MD5方式

    Java作为广泛应用的编程语言,提供了多种加密方法来确保密码的安全。本主题聚焦于使用MD5(Message-Digest Algorithm 5)算法对用户密码进行加密。MD5是一种广泛使用的哈希函数,它将任意长度的数据转化为固定长度的...

    Java类加密程序

    <br>JAVA CLASS文件加密工具对CLASS文件进行加密保护,加密密钥高达256位(bit,即:32字节),并采用多重加密的算法,既安全又高效。加密后的CLASS文件不可能被破解;反编译工具对加密后的CLASS文件无能为力,...

    JAVA数据加密方面的资料

    Java数据加密是一个重要的安全领域,它涉及到保护敏感信息、防止数据泄露和确保网络通信的隐私。在这个主题中,我们将深入探讨三个关键知识点:Java中的类加载器(ClassLoader)在加密解密中的应用、常见的加密算法...

    java加密解密zip压缩包

    在Java编程环境中,处理文件的压缩与解压缩是常见的任务,而涉及到安全性,加密和解密就显得尤为重要。本文将详细讲解如何使用Java实现ZIP压缩包的加密与解密。 首先,我们需要理解加密的基本概念。加密是将明文...

    java socket使用加密协议传输对象

    然而,正确配置和使用SSL/TLS协议并不总是直观的,需要对协议细节和Java安全框架有一定的了解。在实际应用中,开发者应密切关注最新的安全标准和最佳实践,以确保其应用程序能够在不断演变的威胁环境中保持安全。

    加密典型代码(java)

    本资料包“加密典型代码(java)”旨在帮助开发者学习如何在Java环境中编写加密程序,包括有密钥和无密钥(也称为对称加密和非对称加密)两种主要的加密方式。 对称加密是基于相同的密钥进行数据加密和解密的方法,...

Global site tag (gtag.js) - Google Analytics