密钥在不同实体之间传递,因此密钥必须可以序列化。
所有密钥三个特性:
  1. 算法:密钥使用的算法,如DES和DSA等,通过getAlgorithm()获取算法名
  2. 编码形式:密钥的外部编码形式,如X.509,PKCS#8,使用getEncode()方法获取编码格式
  3. 格式:已编码密钥的格式的名称,使用getFomatr()

SecretKey:对称密钥,DES、AES、PBE、MAC算法等
PublicKey和PrivateKey:非对称密钥,即公钥和私钥,DH、RSA、DSA、EC等
KeyPair:包含公钥和私钥的类。

DSA算法密钥对
KeyPairGeneraor kpg=KeyPairGenerator.getInstance("DSA");

kpg.initialize(1024);

keyPair keys=kpg.genKeyPair();


构建密钥对与还原密钥对
keyPairGenerator  keyPairGen=KeyPairGenerator.getInstance("RSA");

KeyPairGenerator.initialize(1024);

KeyPair keyPair=KeyPairGen.generateKeyPair();

//获得私钥密钥字节数组,实际使用过程中,该私钥以此种形式保存传递给另一方
byte[] keyBytes=keyPair.getPrivate().getEncoded();


//由私钥密钥字节数组获取密钥规范

PKCS8EncodedKeySpec pkcs8KeySpec=new PKCS8EncodedKeySpec(keyBytes);

KeyFactory keyFactory=KeyFactory.getInstance("RSA");

Key privateKey=KeyFactory.generatePrivate(pkcs8KeySpec);


  1. 数字签名--私钥签名
byte[] data="Data Signature".getBytes();

keyPairGenerator keyPairGen=KeyPairGenerator.getInstance("DSA")

KeyPairGenerator.initialize(1024);

KeyPair keyPair=KeyPairGen.generatePair();

Signature signature= Signature.getInstance(keyPairGen.getAlgorithm());

signature.initSign(keyPair.getPrivate());//用私钥签名

signature.updata(data);

byte[] sign=signature.sign();

     2.数字签名--公钥验证

signature.initVerify(keyPair.getPublic());//公钥验证

signature.updata(data);

//获取验证结果,true则为验证成功
boolean status=signature.verify(sign);

key解析的更多相关文章

  1. OVS中的key解析

    OVS在处理每条流的时候,先根据每条流生产相应的key,然后根据key匹配相应的流表,根据流表中的action操作来处理每条流,本文对key的结构体进行分析,看看对于一条流会提出那些特征信息.对于ke ...

  2. Android解析Json速度最快的库:json-smart

    场景描写叙述: 本文仅验证了在安卓环境下使用Json的Key作为反序列化条件的解析速度.结论是解析速度最快的不是阿里的fastjson,也不是Google的Gson,而是json-smart. And ...

  3. 从fastjson多层泛型嵌套解析,看jdk泛型推断

    给你一组json数据结构,你把它解析出来到项目中,你会怎么做? // data1 sample { "code" : "1", "msg" ...

  4. DNS分离解析IPV6与IPV4用户

    IPV6改造中经常会遇到,网站使用了CDN,但是CDN厂商还不支持IPV6的情况,而AAAA.A.CNAME记录互相冲突,想实现IPV6用户得到AAAA记录,IPV4用户得到CNAME记录的需求. 解 ...

  5. jQuery数据缓存$.data 的使用以及源码解析

    一.实现原理: 对于DOM元素,通过分配一个唯一的关联id把DOM元素和该DOM元素的数据缓存对象关联起来,关联id被附加到以jQuery.expando的值命名的属性上,数据存储在全局缓存对象jQu ...

  6. Mybatis源码学习之parsing包(解析器)(二)

    简述 大家都知道mybatis中,无论是配置文件mybatis-config.xml,还是SQL语句,都是写在XML文件中的,那么mybatis是如何解析这些XML文件呢?这就是本文将要学习的就是,m ...

  7. 用c#自己实现一个简单的JSON解析器

    一.JSON格式介绍 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.相对于另一种数据交换格式 XML,JSON 有着很多优点.例如易读性更好,占用空间更 ...

  8. 深入 Go 中各个高性能 JSON 解析库

    转载请声明出处哦~,本篇文章发布于luozhiyun的博客:https://www.luozhiyun.com/archives/535 其实本来我是没打算去看 JSON 库的性能问题的,但是最近我对 ...

  9. IOS开发札记(2015-08-20)

    View显示数据借助Model的一个比较好的理由也是因为:有时候从服务器获取的数据相同的value可能对应不同的key(服务端多人协作开发时经常会出现这种情况) 这里盗图描述一下使用Model的好处 ...

随机推荐

  1. Explain 索引优化分析

    Explain 语法 # 语法 explain + DQL语句 mysql> explain select * from city where countrycode ='CHN' or cou ...

  2. 7A - Kalevitch and Chess

    A. Kalevitch and Chess time limit per test 2 seconds memory limit per test 64 megabytes input standa ...

  3. 求第n行杨辉三角(n很大,取模

    1 #include <iostream> 2 #include <cstdio> 3 4 using namespace std; 5 typedef long long l ...

  4. 攻防世界ctf bug

    bug 考查: 逻辑漏洞.文件内容检测绕过 ,文件头是位于文件开头的一段承担一定任务的数据,一般开头标记文件类型,如gif的gif89a,或gif87a, png的x89PNG\x0d\x0a,等等 ...

  5. Sentry & React

    Sentry & React https://docs.sentry.io/platforms/javascript/guides/react/ https://docs.sentry.io/ ...

  6. 如何在没有显示器的情况下,查看 Raspberry Pi 3的 IP 信息(Raspberry Pi 3 ,IP Address)

    1. 如何在没有显示器的情况下,查看 Raspberry Pi 3的 IP 信息(Raspberry Pi 3 ,IP Address) 1 IP Address Any device connect ...

  7. React PureComponent All In One

    React PureComponent All In One import React, { // useState, // useEffect, // Component, PureComponen ...

  8. swiper & swiper slider

    swiper & swiper slider mobile swiper https://idangero.us/swiper/ https://idangero.us/swiper/get- ...

  9. ES6 Map vs ES5 Object

    ES6 Map vs ES5 Object Map vs Object https://developer.mozilla.org/en-US/docs/Web/JavaScript/Referenc ...

  10. KMP 算法 & 字符串查找算法

    KMP算法 Knuth–Morris–Pratt algorithm 克努斯-莫里斯-普拉特 算法 algorithm kmp_search: input: an array of character ...