密码学研究-Provider

简介:

引入

Provider 是研究密码学的第一步,它表示了对于JAVA安全框架的一种实现。对于JDK,它有许多默认的实现,当然了,你也可以不满意其默认的实现,而使用第三方或者自己根据API 开发SPI 然后提供自己的实现。


分析:

对于JDK默认的Provider,它们都在$JAVA_HOME/jre/lib/security目录下java.security文件中:

164910800.png

而默认的JDK提供了9种Provider如下:

165006415.png

我们可以通过JCA中的API 来获取这些Provider的信息:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
package  com.charles.securitysearch;
import  java.security.Provider;
import  java.security.Provider.Service;
import  java.security.Security;
import  java.util.Set;
/**
  * Provider Usage Demo
  *@author cwang58
  *@created date: Oct 23, 2013
  */
public  class  ProviderSearch {
                                                                                                      
     /**
      * get all the providers of current JDK
      * @return
      */
     public  static  String getAllProviders(){
         StringBuilder sb =  new  StringBuilder();
         for  (Provider provider: Security.getProviders()){
             sb.append(getProviderInformation(provider)).append( "\n" );
                                                                                                              
         }
         return  sb.toString();
     }
                                                                                                      
     /**
      * get the information of a given provider
      * @param provider
      * @return
      */
     private  static  String getProviderInformation(Provider provider){
                                                                                                          
         StringBuilder sb =  new  StringBuilder();
         sb.append( "Provider Name:" ).append(provider.getName()).append( "\n" );
         sb.append( "Provider Version:" ).append(provider.getVersion()).append( "\n" );
         sb.append( "provider Info:" ).append(provider.getInfo()).append( "\n" ).append( "\n" );
         return  sb.toString();
                                                                                                          
                                                                                                          
     }
                                                                                                      
     public  static  void  main(String[] args){
                                                                                                          
         System.out.println( "Display all Providers in current JDK" );
         System.out.println(getAllProviders());
                                                                                                          
                                                                                                          
                                                                                                          
                                                                                                      
                                                                                                          
                                                                                                          
     }
                                                                                                          
}


显示结果如下:

172108416.png


显然,这个结果和我们在$JAVA_HOME/jre/lib/security中看到的是一致的。


后话:

而如果我们不想要JDK默认的provider,那么我们可以有两种方式添加,一个是编辑java.security文件,按照顺序在后面加上自己需要的provider类,另外一种方式就是用java.security.Security类的addProvider()和removeProvider()方法就可以完成了





本文转自 charles_wang888 51CTO博客,原文链接:http://blog.51cto.com/supercharles888/1314058,如需转载请自行联系原作者
目录
相关文章
|
11月前
|
算法 安全 关系型数据库
密码学系列之七:数字签名
密码学系列之七:数字签名
1104 0
|
Rust 算法 安全
【密码学】一文读懂HMAC
本文将来聊一聊基于哈希函数的消息认证码,在此之前,先来科普一下什么是 「消息认证码」 (MAC), 先来看一个简单的栗子
1956 0
【密码学】一文读懂HMAC
|
存储 算法 数据安全/隐私保护
【密码学】一文读懂白盒AES(Chow方案)(一)
本文主要参考了文献^[1], 代码参考了^[2], 这里感谢文献作者和代码作者,如果有能力的大佬,可以自行查看原文献,个人水平有限,有哪里写的不对的地方,也欢迎读者指正。
4071 0
【密码学】一文读懂白盒AES(Chow方案)(一)
|
11月前
|
人工智能 分布式计算 安全
【现代密码学】笔记1.2 -- 对称密钥加密、现代密码学的基本原则《introduction to modern cryphtography》现代密码学原理与协议
【现代密码学】笔记1.2 -- 对称密钥加密、现代密码学的基本原则《introduction to modern cryphtography》现代密码学原理与协议
653 0
|
11月前
|
机器学习/深度学习 安全 算法
【现代密码学】笔记9-10.3-- 公钥(非对称加密)、混合加密理论《introduction to modern cryphtography》
【现代密码学】笔记9-10.3-- 公钥(非对称加密)、混合加密理论《introduction to modern cryphtography》
182 0
|
Rust 算法 数据安全/隐私保护
【密码学】一文读懂白盒AES(Chow方案)(二)
本文主要参考了文献^[1], 代码参考了^[2], 这里感谢文献作者和代码作者,如果有能力的大佬,可以自行查看原文献,个人水平有限,有哪里写的不对的地方,也欢迎读者指正。
1789 0
【密码学】一文读懂白盒AES(Chow方案)(二)
|
存储 算法 安全
【11.10】现代密码学1——密码学发展史:密码学概述、安全服务、香农理论、现代密码学
【11.10】现代密码学1——密码学发展史:密码学概述、安全服务、香农理论、现代密码学
319 0
|
算法 安全 Java
常用密码学算法及其工程实践
在工程实践中,加解密算法、单向散列函数、消息认证码、数字签名等密码学内容经常出现。由于我之前对密码学一知半解,经常有摸不着头脑的情况。 比如我遇到过以下两种情况,我相信很多对密码学不熟悉的同学可能也有跟我一样的疑惑: 情况一,同样的明文,同样的密钥,每次加密生成的密文居然不一样?不一样的密文为什么能解密为同样的明文?我在开发友盟+数擎一体机时,在加密数据库中发现了这样的情况,当时非常不理解。
712 0
常用密码学算法及其工程实践
|
算法 数据安全/隐私保护
【密码学】一文读懂ZUC算法
这次在来聊一个国产密码, 祖冲之算法(ZUC)是中华人民共和国政府采用的一种序列密码标准,由国家密码管理局于2012年3月21日发布,相关标准为“GM/T 0001-2016 祖冲之序列密码算法”,2016年10月成为中国国家密码标准(GB/T 33133-2016)。
2104 0
【密码学】一文读懂ZUC算法
|
算法 安全 小程序
懂了!国际算法体系对称算法DES原理
懂了!国际算法体系对称算法DES原理
懂了!国际算法体系对称算法DES原理
下一篇
oss创建bucket