密码技术学习(3)-Java加密体系

  • Java的加密体系

Java的安全组成

我的主编程语言是Java,所以我用Java语言来学习这些加密技术。

我们先来介绍几个概念

  • JCA (Java Cryptography Architecture)它提供了基础的加密框架,包括”Provider”架构以及一系列Api,比如证书、数字签名、消息摘要、密钥生成器等。通过不同的Provider来实现具体的加密算法,比如说MD5、DES、RSA等。扩展阅读
  • JCE(Java Cryptography Extension) Java对JCA的扩展,提供了具体的加密算法。
  • JSSE(Java Secure Socket Extension,) 提供了对SSL(Secure Socket Layer,安全套接字层) 和TLS(Transport Layer Security ,安全传输层协议)的扩展,确保网络通信的安全 百度百科 
    -JAAS( Java Authentication Authorization Service,Java验证和授权API)提供了灵活和可伸缩的机制来保证客户端或服务器端的Java程序,作为标准的用户认证与授权模型。百度百科

Java Provider体系

在Java中,JCA本身并不提供加密算法,而如果想要使用加密算法,就要用到CSP(Cryptographic Service Provider,加密服务提供者),以下简称Provider。Provider是一系列组件的统称。 
在使用JCA时,Java寻找指定加密算法的提供者,然后调用他们。每个Provider都有自己独一无二的名称,通过名称来选择特定的提供者。


md = MessageDigest.getInstance("SHA-256");
md = MessageDigest.getInstance("SHA-256", "ProviderC");

以下图片表明,Java是如何请求SHA-256的。第一幅图是找寻SHA-256算法的提供者,第二幅图是请求特定的提供者的算法实现。

 

以上两张图来自Oracle,详细介绍

在JDK中,本身包含了一些Provider,它们都配置在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

你可以将其他的提供者按照以下格式,添加进去。

security.provider.<n>=具体的Provider

也可是在使用之前添加

static {
     Security.insertProviderAt(new org.bouncycastle.jce.provider.BouncyCastleProvider(), 1);
}

虽然说Java本身提供了一些算法的实现,但是因为某些国家的进口管制限制,Java发布的运行环境包中的加解密有一定的限制。比如默认不允许256位密钥的AES加解密,解决方法就是修改策略文件。 
去官网下载JCE无限制权限策略文件,然后将%JDK_HOME%\jre\lib\security中的jar文件替换为你下载的文件。 下载地址

第三方开源的Provider

  • Bouncy Castle 提供了很多Jdk本身不支持的高强度算法,,比如说DES(64)、IDEA等,其Provider名称为BC 官网
  • SpongyCastle 对最新版本的 BouncyCastle 进行了简单地重新打包。这是因为Android平台使用了删减的Bouncy Castle包,为了提供完整的支持,并且避免冲突,所以使用新的包结构。Provider名称变为SC
  • IBM SDK IBM提供的开发人员工具包 这其中也包含安全服务提供者

参考书籍和文章

关于本章内容,参考了一下书籍和文章

  1. JSSE 百度百科
  2. JAAS 百度百科
  3. Oracle crypto 介绍 扩展阅读

本系列其他文章

密码技术学习系列文章

猜你喜欢

转载自blog.csdn.net/laozhaishaozuo/article/details/81812291
今日推荐