密钥在不同实体之间传递,因此密钥必须可以序列化。
所有密钥三个特性:
  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. Linux下/bin和/sbin的区别

    bin: bin为binary的简写主要放置一些系统的必备执行档例如:cat.cp.chmod df.dmesg.gzip.kill.ls.mkdir.more.mount.rm.su.tar等./u ...

  2. JSON-LD & SEO

    JSON-LD & SEO https://json-ld.org/ https://en.wikipedia.org/wiki/JSON-LD Google Search structure ...

  3. how to find jobs in the website codes

    how to find jobs in the website codes X-Custom-Heade https://developer.mozilla.org/en-US/docs/Web/AP ...

  4. Vue SSR in Action

    Vue SSR in Action https://ssr.vuejs.org/ https://ssr.vuejs.org/api/ https://ssr.vuejs.org/guide/data ...

  5. Redis all in one

    Redis all in one Redis: REmote DIctionary Server https://redis.io/topics/quickstart Download, extrac ...

  6. c++ 读取ASCII

    void ReadASCII(BYTE* addr, size_t offset, char r[]) { size_t i = 0; char c; while (true) { c = *(add ...

  7. Spring 注解(二)注解工具类

    本文转载自Spring 注解(二)注解工具类 导语 首先回顾一下 AnnotationUtils 和 AnnotatedElementUtils 这两个注解工具类的用法: @Test @GetMapp ...

  8. node初体验(一)

    1.node.js是一个构建在chrome V8引擎上的javascript运行环境 2.node.js特点:单线程.事件驱动.非阻塞IO模型.轻量 3.node.js是单线程的(多个请求都是一个线程 ...

  9. 开源OA办公平台搭建教程:O2OA+Arduino实现物联网应用(一)

    O2OA平台是一个企业办公类系统的低代码开发平台,更够方便的开发和部署协同办公.流程管理等应用,但它能做的远不止这些,今天这个案例就为大家介绍一下,O2OA可以做的更多. 最近对养鱼产生了浓厚的兴趣, ...

  10. Sqoop 数据迁移工具

    Sqoop 数据迁移工具 sqoop : SQL to hadOOP 两个功能: 1. RDB 向HDFS导入 2. HDFS向RDB导入 注:拷贝mysql-connector.jar 和 json ...