密钥在不同实体之间传递,因此密钥必须可以序列化。
所有密钥三个特性:
  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. 关于HashMap遍历,为什么要用entry

    Map.entrySet() 这个方法返回的是一个Set<Map.Entry<K,V>>,Map.Entry 是Map中的一个接口,他的用途是表示一个映射项(里面有Key和Va ...

  2. 【算法】KMP算法

    简介 KMP算法由 Knuth-Morris-Pratt 三位科学家提出,可用于在一个 文本串 中寻找某 模式串 存在的位置. 本算法可以有效降低在一个 文本串 中寻找某 模式串 过程的时间复杂度.( ...

  3. Dos简单命令及CMD打开方式

    打开CMD方式 开始+系统+命令提示符 WIN健+R 输入cmd打开控制台(推荐使用) 在任意文件夹下面,按住shift+鼠标右击,进入powershell 资源管理器的地址栏路径最前面+cmd+空格 ...

  4. Vue & Sentry & ErrorHandler

    Vue & Sentry & ErrorHandler import * as Sentry from '@sentry/browser'; import { Vue as VueIn ...

  5. How to get the real screen size(screen resolution) by using js

    How to get the real screen size(screen resolution) by using js 获取用户屏幕的真实像素分辨率, 屏幕实际尺寸 window.deviceP ...

  6. css 命名冲突 & solution

    css 命名冲突 & solution 类似这样,为了解决模块间可能存在的 css 命名冲突问题,需要单独提供给模块开发者一套模块开发环境:同时,文档上要有如何使用的规范说明. CSS 建议: ...

  7. GraphQL API In Action

    GraphQL API In Action GraphQL API express $ yarn add express express-graphql graphql # OR $ npm i -S ...

  8. VSCode & outline & source code

    VSCode & outline & source code Dart 源码学习 outline 速览 dart-core List class instance-methods ht ...

  9. react hooks & props change & pagination current bug

    react hooks & props change & pagination current bug multi tables & pigination bug & ...

  10. 「NGK每日快讯」12.3日NGK公链第30期官方快讯!