密钥对的存储和加载

加载

主要用于数字签名:

1.存储密钥对

首先使用KeyPairGeneration产生密钥对:

KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
keyGen.initialize(1024);
KeyPair keyPair = keyGen.genKeyPair();
privateKey = keyPair.getPrivate();
publicKey = keyPair.getPublic();

将密钥存储为文件的方法:

FileOutputStream fs = new FileOutputStream(fileName);
fs.write(privateKey.getEncoded());
fs.close();

2.加载密钥对

假设公钥文件为public.dat、private.dat

首先读取公钥文件:

//read public key
FileInputStream fsPublicKey = new FileInputStream(publicKeyFile);
BufferedInputStream bfsPublicKey = new BufferedInputStream(fsPublicKey);
byte[] bytePublicKey = new byte[bfsPublicKey.available()];
bfsPublicKey.read(bytePublicKey);
bfsPublicKey.close();

使用KeyFactory产生公钥

//build public key
X509EncodedKeySpec pubKeySpec = new X509EncodedKeySpec(
byteEncodedPublicKey);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PublicKey pubKey = keyFactory.generatePublic(pubKeySpec);

主意,私钥的的处理和公钥相同,唯一不同的是私钥的KeySpec不同。私钥应使用PKCS8EncodedKeySpec

时间: 2024-10-08 22:20:08

密钥对的存储和加载的相关文章

GNU系统的运行地址和加载地址

在连接目标代码时,会提到运行地址和加载地址.这两者有什么区别呢? 加载时地址就是程序放置的地址,运行地址就是程序定位的绝对地址,也即在编译连接时定位的地址.如果程序是在flash里运行,则运行地址和加载地址是相同的.如果程序是在ram里运行,但程序是存储在flash里,则运行地址指向ram,而加载地址是指向flash.代码一般是烧写在NAND里面,比如S3C2440 如果开机从NAND启动 其开始的4K代码会被COPY到2440内部的4KRAM 用于对关键硬件的初始化 这时候内部RAM被映射为0

《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一2.4.1 保存和加载序列化对象

2.4.1 保存和加载序列化对象 为了保存对象数据,首先需要打开一个ObjectOutputStream对象: 现在,为了保存对象,可以直接使用ObjectOutputStream的writeObject方法,如下 所示: 为了将这些对象读回,首先需要获得一个ObjectInputStream对象: 然后,用readObject方法以这些对象被写出时的顺序获得它们: 但是,对希望在对象输出流中存储或从对象输入流中恢复的所有类都应进行一下修改,这些类必须实现Serializable接口: Seri

TensorFlow教程之进阶指南 3.2 变量:创建、初始化、保存和加载

本文档为TensorFlow参考文档,本转载已得到TensorFlow中文社区授权. 当训练模型时,用变量来存储和更新参数.变量包含张量 (Tensor)存放于内存的缓存区.建模时它们需要被明确地初始化,模型训练后它们必须被存储到磁盘.这些变量的值可在之后模型训练和分析是被加载. 本文档描述以下两个TensorFlow类.点击以下链接可查看完整的API文档: tf.Variable 类 tf.train.Saver 类 创建 当创建一个变量时,你将一个张量作为初始值传入构造函数Variable(

第十三章——表和索引分区(2)——使用拆分删除和加载大数据

原文:第十三章--表和索引分区(2)--使用拆分删除和加载大数据 前言:         很多时候需要对大数据量进行归档或者删除,并周期性加载大数据量到一个大表中,现在来做个简单的例子,你经常需要删除大数据量表中的大量数据.同时,你想加载大量数据到这个表中,当表中数据有数十亿时,这个操作可能消耗几个小时,但是如果你的表有分区,那么执行起来会很有效. 本文将模拟删除一个季度的数据,并加载整个季度到现有表,其中使用了拆分(splitting).合并(merging)和切换分区(switching).

《数据科学:R语言实现》——第2章 数据抽取、转换和加载 2.1 引言

第2章 数据抽取.转换和加载 2.1 引言 在使用数据回答关键业务问题之前,最重要的事情是准备数据.数据通常存在文件中,使用Excel或者文本编辑器可以轻松地获取.但是数据也可以来自于其他来源,例如数据库.网站和各种文件格式.能够从这些源中引入数据很重要. 数据主要有4种类型.以文本形式存储的数据最简单.由于一些用户需要把数据存在结构化的文件中,因此带有.tab或.csv扩展名的文件可以用来存放一定列的数据.很多年以来,Excel在数据处理领域占据主导地位,这个软件使用.xls和.xlsx文件格

Javascript 遮罩层和加载效果代码

这篇文章介绍了Javascript 遮罩层和加载效果代码,有需要的朋友可以参考一下   复制代码 代码如下:  //loading function showLoad(tipInfo) { var iWidth = 120; //弹出窗口的宽度; var iHeight = 0; //弹出窗口的高度; var scrolltop = 0; var scrollleft = 0; var cheight = 0; var cwidth = 0; var eTip = document.create

CSS技巧荟萃:了解CSS页面布局和加载流程

如果你开发web相关应用或者网站的话,肯定知道CSS对于页面布局的重要性.在本篇CSS技巧中我们将介绍页面加载的流程来帮助你更好的实现页面布局. 介绍 在我们开始正式的介绍页面流程前,我们需要简单了解几种不同类型的html元素,以及它们的缺省显示方式.这里我们主要重点介绍两个类型的元素: block inline 如果大家关心html5的话,你应该知道在HTML5中也包含了几个新的元素,例如,section,article等等,但是仍旧遵循这里我们介绍的显示类型. inline类型的元素包括:

Div与table的区别在速度和加载与网页应用等等中的差别介绍

Div与table的区别在各个方面表现都很明显比如速度和加载方式方面的区别.在网页应用中的差别等等,多不胜数,下文详细整理了一下,喜欢的朋友可以参考下,希望可以帮助大家更好的理解Div与table的区别 1:速度和加载方式方面的区别 div 和 table 的差异不是速度,而是加载方式,速度只能是指网络速度,如果速度足够快,是没有差异的: div 的加载方式是即读即加载,遇到 没有遇到 的时候一样加载 div 中的内容,读多少加载多少;table 的加载方式是完成后加载,遇到 后,在读到 之前,

背水一战 Windows 10 (62) - 控件(媒体类): InkCanvas 保存和加载, 手写识别

原文:背水一战 Windows 10 (62) - 控件(媒体类): InkCanvas 保存和加载, 手写识别 [源码下载] 背水一战 Windows 10 (62) - 控件(媒体类): InkCanvas 保存和加载, 手写识别 作者:webabcd 介绍背水一战 Windows 10 之 控件(媒体类) InkCanvas 保存和加载 InkCanvas 手写识别 示例1.演示 InkCanvas 涂鸦板的保存和加载Controls/MediaControl/InkCanvasDemo3