对称密钥和非对称密钥

Key

接口介绍: Key接口是所有密钥接口的顶层接口,一切与加密有关的操作都离不开Key接口,其中SecrectKey、PublicKey()和PrivateKey()均继承自Key接口,定义了对称密钥和非对称密钥接口。

Key方法详述

//算法
getAlgorithm()
//编码形式
getEncoded()
//格式
getFormat()

SecrectKey

接口详述: 该接口是对称密钥顶层接口,DES和AES直接通过该接口提供,PBE接口提供PEB算法定义并继承了该接口,Mac算法的实现也是通过该接口实现类SecrectKeySpec

PublicKey和PrivateKey

接口详述: 这对接口是非对称密钥顶层接口,DH、RSA、DSA和EC接口均继承了这两个接口.

KeyPair

类详述: 是对非对称密钥的拓展,它是密钥对的载体,密钥对。

方法详述:

//构造函数,值得注意的是KeyPair只能通过构造函数初始化公钥和私钥
KeyPair(PublicKey publicKey,PrivateKey privateKey)

//返回一个公钥引用
getPublic();

//返回一个私钥对象
getPrivate();


KeyGenerator

功能: 用来生成对称加密算法的秘密密钥,并提供相关信息

生成方式: 与密码无关的方式和特定于算法的方式

方法详述

//实例化对象

//1.制定算法类型
KeyGenerator keyGenerator1 = KeyGenerator.getInstance("HmacMD5"); 

//2.指定算法类型的同时指定提供者
KeyGenerator keyGenerator2 = KeyGenerator.getInstance("HmacMD5","SunJCE");

Provider provider = Security.getProvider("SunJCE");
KeyGenerator keyGenerator3 = KeyGenerator.getInstance("HmacMD5",provider); 

//与算法无关的初始化方法
init(SecureRandom random)
init(int keySize)
init(int keySize,SecureRandom random)

//与算法相关的初始化方法
init(AlgorithmParameterSpec params);
init(AlgorithmParameterSpec params,SecureRandom random);

//生成一个SecretKey对象
generalKey();

//获取算法名称
getAlgorithm();

//获取提供者
getProvider();

//简单的实现实例
KeyGenerator keyGenerator = KeyGenerator.getInstance("HmacMD5");
SecrectKey key = keyGenerator.generalKey();
Syetem.out.println(new BigInteger(key.getEncode()));

//打印结果 -3685906392408423093039171339150305988965616524030789173027746427172079039241578249210327619576278316826353721432347866064387477680015812613891791552395429

KeyPairGenerator

功能: 生成用于非对称加密算法含有的公钥和私钥的密钥对

方法详述:

//获取实例化对象
getInstance(String algorithm);
getInstance(String algorithm,Provider provider);
getInstance(String algorithm,String provider);

//初始化

//算法无关的初始化
initialize(int keySize); //注意密钥长度范围为512~1024,按64的整数倍递增至1024
initialize(int keySize,SecureRandom random);

//特定于算法的初始化
initialize(AlgorithmParameter params);
initialize(AlgorithmParameter params,SecureRandom random);

// 生成一个KeyPair对象
generateKeyPair();

//生成KeyPair对象,内部实现时调用了generateKeyPair(),通常使用这个方法后去密钥对
genKeyPair();

//获取算法名称
getAlgorithm();

//获取提供者
getProvider();

//代码演示
KeyPairGenerator kpg = KeyPairGenerator.getInstance("DSA");
kpg.initialize(1024);
KeyPair keys = kpg.genKeyPair();


猜你喜欢

转载自blog.csdn.net/weixin_43935907/article/details/89007551