Java验证公私密钥对

验证过程:

  1. 创建一个足够长的随机字节数,称为challenge
  2. 使用密钥签名challenge
  3. 使用公钥验证challenge

示例代码:

KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");  //密钥生成器
keyGen.initialize(2048);

KeyPair keyPair = keyGen.generateKeyPair();    //密钥对
PublicKey publicKey = keyPair.getPublic();     //公钥
PrivateKey privateKey = keyPair.getPrivate();  //私钥

//创建challenge
byte[] challenge = new byte[10000];
ThreadLocalRandom.current().nextBytes(challenge);

// 使用私钥签名challenge
Signature sig = Signature.getInstance("SHA256withRSA");
sig.initSign(privateKey);
sig.update(challenge);
byte[] signature = sig.sign();

// 使用公钥验证challenge
sig.initVerify(publicKey);
sig.update(challenge);

boolean keyPairMatches = sig.verify(signature);

如果公私密钥对匹配,keyPairMatches返回true。

版权声明:著作权归作者所有。

相关推荐

Html对加载失败的图片使用默认图片替换

在img标签使用onerror监听图片的加载,如果出现错误:1、设置onerror=null,这是为了避免default.png也加载失败2、把图片的src属性设置为默认图片的url,加载默认图片替换。<img src="myimg.png" onError="this.onerror=null;this.src='default.png';&quo

JavaScript版身份证验证

这是用于验证身份证的工具函数,支持15位或18位省份证。/** * 身份证号码结构: * * 根据〖中华人民共和国国家标准GB11643-1999〗中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。 * 排列顺序从左至右依次为:6位数字地址码,8位数字出生日期码,3位数字顺序码和1位数字校验码。 * * 地址码(前6位):表示对

C#对DataTable做LINQ查询

我们是不能直接对DataTable做LINQ查询,DataRowCollection是没有实现IEnumerable<T>。有一些方法可以间接实现对DataTable执行LINQ查询。AsEnumerable()使用DataTable的扩展AsEnumerable(),把DataTable转换为IEnumerable<DataRow>。var results&nb

Jenkins集成Git ssh key密钥认证

Jenkins有两种方法集成Git的ssh key认证:这种方法很简单,只要把私钥拷贝到jenkins用户的~/.ssh目录,当git使用ssh访问仓库时会尝试使用此私钥。1、切换为jenkins用户$sudo su jenkins 2、创建.ssh目录,已存在目录忽略此步$cd ~ $mkdir .ssh 3、创建访问git的ssh k

Nginx gzip对javascript文件压缩无效

问题Nginx从1.0.15升级到1.12.1后,原来开启的gzip对javascript文件压缩失效了。原来nginx的gzip相关配置如下gzip on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_comp_level 2; gzip_types text/plain applicati