PKCS#1 v2.1 java 语言实现参考

原创 2012年03月27日 11:15:31

    PKCS#1 v2.1 逐渐已经替代 PKCS#1 v1.5成为了应用选择的主要加密/签名方案。近期看了一下这规范。发现新增的OAEP加密、PSS签名网上的资源不是很多。所以弄了这么个工程,一个目的是导读,一个目的是验证对算法的理解,这里共享给大家,希望对大家理解这个规范有所帮助:
    基于BigInteger类用java封装的PKCS#1 v2.1 全算法实现,模块与规范一一对应。包含 I2OSP OS2IP RSAEP RSADP RSASP1 RSAVP1 RSAES-OAEP RSAES-PKCS1_v1_5 RSASSA-PSS RSASSA-PKCS1-v1_5 以及 MGF SourceAlgrithm等规范定义的模块。并在注释中对应文档各个部分。并部分实现了规范附带的TestVect的测试脚本。
    用C的朋友,请参考开源项目openssl对应的源代码。
本实现完全以学习/导读为目的,在性能上没有做太多的考虑和优化。请不要直接使用到实际项目中,建议使用sun自带的Cipher等类。
bug反馈: zoudeqiang1979@tsinghua.org.cn

猛戳版本V1.0

附录:
TestVect类对应于官网上提供的测试脚本,由于录入大数组实在痛苦,所以部分实现。有心人可以帮忙补全。分析打印结果与测试脚本参考数据,可以确认算法正确性。
TestVect.testvect为编译开关,只在测试模式的时候开启,用以用指定数组替换随机数seed和salt,并打印log。为true的时候,请配合test_seed和test_salt使用。正常运行的时候,请改为false.


package com.broadthinking.pkcs.pkcs_1.test;

import com.broadthinking.pkcs.pkcs_1.PKCS1Exception;

/**
 * This directory contains test vectors for RSAES-OAEP and RSASSA-PSS as defined
 * in PKCS #1 v2.1.
 * 
 * The files:
 * 
 * readme.txt This file.
 * 
 * oaep-vect.txt Test vectors for RSAES-OAEP encryption.
 * 
 * oaep-int.txt Intermediate values for RSAES-OAEP encryption and RSA decryption
 * with CRT. Also, DER-encoded RSAPrivateKey and RSAPublicKey types.
 * 
 * pss-vect.txt Test vectors for RSASSA-PSS signing.
 * 
 * pss-int.txt Intermediate values for RSASSA-PSS signing.
 * 
 * @author CaesarZou
 * 
 */

public class TestVect {
	
	public static void printHex(String Message, byte [] M) {
		printHex(Message, M, 0, M.length);
	}
	
	public static void printHex(String Message, byte [] M, int offset , int length) {
		System.out.print("# " + Message);
		System.out.print(": ");
		for(int i=0;i<length;i++) {
			if((i%16)==0) {
				System.out.println();
			}
			System.out.print(String.format("%02x ", M[offset+i]));
		}
		System.out.println();
		System.out.println();
	}
	
	public static void main(String [] args) throws PKCS1Exception {
		OAEP_Int.Test();
		OAEP_Vect.Test();
		PSS_Int.Test();
		PSS_Vect.Test();
	}
	
	public static final boolean test_vec = true;
	public static byte [] test_seed = null;
	public static byte [] test_salt = null;
}


java pkcs#11读取证书加解密(初学-分享)

原文:http://www.cnblogs.com/sunfb/archive/2013/02/28/2937227.html 插入USB-KEY, 想通过HttpClient来向服务器发送...

Java 进行 RSA 加解密时不得不考虑到的那些事儿

1. 加密的系统不要具备解密的功能,否则 RSA 可能不太合适公钥加密,私钥解密。加密的系统和解密的系统分开部署,加密的系统不应该同时具备解密的功能,这样即使黑客攻破了加密系统,他拿到的也只是一堆无法...
  • defonds
  • defonds
  • 2015年01月16日 11:56
  • 73851

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

Java中使用OpenSSL生成的RSA公私钥进行数据加解密

本文出处:http://blog.csdn.net/chaijunkun/article/details/7275632,转载请注明。由于本人不定期会整理相关博文,会对相应内容作出完善。因此强烈建议在...

pkcs1与pkcs8格式RSA私钥互相转换

1、PKCS1私钥生成      openssl genrsa -out private.key 1024      private.key文件内容如下:      -----BEGIN R...

Java使用RSA加密解密签名及校验

由于项目要用到非对称加密解密签名校验什么的,于是参考《Java加密解密的艺术》写一个RSA进行加密解密签名及校验的Demo,代码很简单,特此分享!RSA加密解密类:package com.ihep; ...

PKCS#1 v2.1 RSA Cryptography Standard (PKCS#1 RSA密码学规范,版本2.1)

PKCS#1 v2.1: RSA密码学规范 RSA实验室 2002年6月14日 --翻译:CaesarZou (zoudeqiang1979@tsinghua.org.cn) 1.介绍...

RSA PKCS1 填充方式

1)RSA_PKCS1_PADDING 填充模式,最常用的模式要求:输入 必须 比 RSA 钥模长(modulus) 短至少11个字节, 也就是 RSA_size(rsa) – 11    如果输入的...

PKCS1签名&amp;PKCS7签名&amp;PKCS…

1.1.1.1  PKCS#1标准格式签名 1.1.1.1.1 PKCS#1签名格式 被签名的数据为字节数组。 对给出的被签名原数据进行HASH运算,HASH结果按PKCS#1标准进行填充: ...
  • wh_2396
  • wh_2396
  • 2016年08月29日 21:02
  • 2272

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:PKCS#1 v2.1 java 语言实现参考
举报原因:
原因补充:

(最多只允许输入30个字)