且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

密码学研究-Provider

更新时间:2022-09-27 16:11:38

引入

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


分析:

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

密码学研究-Provider

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

密码学研究-Provider

我们可以通过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());
                                                                                                          
                                                                                                          
                                                                                                          
                                                                                                      
                                                                                                          
                                                                                                          
    }
                                                                                                          
}


显示结果如下:

密码学研究-Provider


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


后话:

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





本文转自 charles_wang888 51CTO博客,原文链接:http://blog.51cto.com/supercharles888/1314058,如需转载请自行联系原作者