`

生成基于RSA与SM2数字证书的请求PKCS10CertificationRequest

 
阅读更多

申请证书时生成的req文件需要:主题  密钥对 签名加密算法

 

写道
import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import java.security.SecureRandom;
import java.security.SignatureException;
import javax.security.auth.x500.X500Principal;
import sun.misc.BASE64Encoder;

/**
* @param algorithm签名算法 1.SHA1withRSA 2.SM3WITHSM2
* @param dn主题
* @param keyPair密钥对
* @param keyType密钥类型 SM2|RSA
* @return 返回p10请求的字符串
* @throws SignatureException
* @throws NoSuchProviderException
* @throws NoSuchAlgorithmException
* @throws InvalidKeyException
* @throws KeyPairException
*/
private static String getP10ReqestBC(String algorithm, String dn, KeyPair keyPair,String keyType) throws InvalidKeyException, NoSuchAlgorithmException, NoSuchProviderException, SignatureException
{
String p10RequestString = null;
byte[] p10buffer = null;
if(keyType.equals("SM2")){
fisher.man.jce.PKCS10CertificationRequest p10Request;
p10Request = new fisher.man.jce.PKCS10CertificationRequest(
algorithm, new X500Principal(dn), keyPair.getPublic(),
null, keyPair.getPrivate());
p10buffer = p10Request.getDEREncoded();
}else{
org.bouncycastle.jce.PKCS10CertificationRequest p10Request;
p10Request = new org.bouncycastle.jce.PKCS10CertificationRequest(
algorithm, new X500Principal(dn), keyPair.getPublic(),
null, keyPair.getPrivate());
p10buffer = p10Request.getDEREncoded();
}

p10RequestString = new BASE64Encoder().encode(p10buffer);

return p10RequestString;
}

public static void main(String[] args) throws IOException, InvalidKeyException, NoSuchAlgorithmException, NoSuchProviderException, SignatureException {
// algorithm签名算法 SM2
String algorithm = "SM3WITHSM2";
// dn主题
String dn = "CN=dfg, OU=aert, O=45y, L=sdfg, ST=fg, C=CN";

KeyPairGenerator ecPair = null;
SecureRandom rand = null;
rand = SecureRandom.getInstance("TrueRandom", "FishermanJCE");
ecPair = KeyPairGenerator.getInstance("SM2", "FishermanJCE");
ecPair.initialize(256, new SecureRandom());
// keyPair密钥对
KeyPair keyPair = ecPair.generateKeyPair();
String requestReq = getP10ReqestBC(algorithm,dn,keyPair,"SM2");
System.out.println("SM2 私钥=" + keyPair.getPrivate());
System.out.println("SM2 公钥=" + keyPair.getPublic());
System.out.println("SM2 p10请求的字符串=" + requestReq);


System.err.println("************************************");
System.err.println("************************************");
System.err.println("************************************");

// algorithm签名算法 RSA
String algorithm2 = "SHA1withRSA";
// dn主题
String dn2 = "CN=zdfg, OU=ert, O=er, L=fgj, ST=vfgh, C=CN";

rand = SecureRandom.getInstance("TrueRandom", "FishermanJCE");
ecPair = KeyPairGenerator.getInstance("RSA", "BC");
ecPair.initialize(1024, new SecureRandom());

// keyPair密钥对
KeyPair keyPair2 = ecPair.generateKeyPair();
String requestReq2 = getP10ReqestBC(algorithm2,dn2,keyPair2,"RSA");
System.out.println("RSA 私钥=" + keyPair.getPrivate());
System.out.println("RSA 公钥=" + keyPair.getPublic());
System.out.println("RSA p10请求的字符串=" + requestReq2);
}

 

 输出结果:

写道

SM2 私钥=EC Private Key
S: a40ed786b2867685507a4abad7264dbff72341f79503e6ff5366703789a2a7d7

SM2 公钥=EC Public Key
X: c337bb8017d572bcbc03b42280e43114fbefdff1d9a4e08866afb8ebecfe0547
Y: ae5d3c580e5d348be7a1db7d079983f9a4a59866267d951ddbbdcc45775ed82a

SM2 p10请求的字符串=MIIB5jCCAZECAQAwVDELMAkGA1UEBhMCQ04xCzAJBgNVBAgTAmZnMQ0wCwYDVQQHEwRzZGZnMQww
CgYDVQQKEwM0NXkxDTALBgNVBAsTBGFlcnQxDDAKBgNVBAMTA2RmZzCCATQwge0GCCqBHIFFAYIt
MIHgAgEBMCwGByqGSM49AQECIQCFQtaeTARPGOi5JDW/b/feRXKDkVxFUX1yLtuLCPHfwzBEBCB4
eWi0+jLD/SQXhC5zu/7/LzyEi2gx1+DsZSKLOTfkmAQgY+TG07I7DISc+EJBSEv+SPYdWaWxa6Bu
bhLR2ifFJJoEQQRCHevWG2LqtnRkNOvDzDFeMiILO63VC9xMTmwUf+3UPQaAUSvLtCwH1HNJ0hU7
cMTl1/38v6NuoahYQbnkbgmiAiEAhULWnkwETxjouSQ1v2/33Sl3IGMEhWKNWudO58MuebcCAQED
QgAEwze7gBfVcry8A7QigOQxFPvv3/HZpOCIZq+46+z+BUeuXTxYDl00i+eh230HmYP5pKWYZiZ9
lR3bvcxFd17YKjAMBggqgRyBRQGDdQUAA0EAhneSdWonUMXL0Sk4vpzPtqZvUddbYo/Bb7o3a+Te
k4+v/kp8q7hvA+2BubXpTSAE2AjE0qytc4THB++vmI75Lg==
************************************
************************************
************************************
RSA 私钥=EC Private Key
S: a40ed786b2867685507a4abad7264dbff72341f79503e6ff5366703789a2a7d7

RSA 公钥=EC Public Key
X: c337bb8017d572bcbc03b42280e43114fbefdff1d9a4e08866afb8ebecfe0547
Y: ae5d3c580e5d348be7a1db7d079983f9a4a59866267d951ddbbdcc45775ed82a

RSA p10请求的字符串=MIIBkTCB+wIBADBUMQswCQYDVQQGEwJDTjENMAsGA1UECBMEdmZnaDEMMAoGA1UEBxMDZmdqMQsw
CQYDVQQKEwJlcjEMMAoGA1UECxMDZXJ0MQ0wCwYDVQQDEwR6ZGZnMIGfMA0GCSqGSIb3DQEBAQUA
A4GNADCBiQKBgQCPE+/QiaeKTWc/vZueZ6j8D1YaPdW8Hmgq1dJBwKPhGmWpEwbDxMwNpDalHeax
JXnNFVPwtDhzTOGTm9QBLsnhM0/YxrLD/sK5RYD0T8786/HQrRat1n5xg3rnHKntM3QoWbw4iW7h
T62Yrro62xP8hnWArrbOc5dUpDAD/twNIwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAGN8AhMQMToq
IyRlkF3LCkCMT9CKnn4p+qIn3u0WMWIkm7S80/WDBhXMoUSQH2ZK1wcjErCIJwGXmiPmuFU9sD/V
euwF0ul/WxjuQUzU9VHYuNyYajC2xVyVl+rE0Zc8SDMyU80V1/eAAp2fPIcKvET4pKzhYh4n3iDh
Gb0U57Iq

 

分享到:
评论
10 楼 宋贝贝 2018-10-17  
您好,能麻烦您把这个包fisher.man.jce.PKCS10CertificationRequest发一下么。谢谢!我的邮箱是songbeibei99@163.com
9 楼 upset_ming 2018-06-04  
DoubleCA的JCE实现了SM2算法的密钥协商,国密SM2、SM3、SM4算法全套都实现了,包括JAVA KeyStore,叫dcks,实现了SM2密钥对的存储,包括国密SSL,可以实现Tomcat的国密SSL功能。包括各种国密数字证书都可以免费制作。
可在Android和各JAVA平台上使用。
8 楼 stormlyf 2018-05-03  
您好,能麻烦您把这个包fisher.man.jce.PKCS10CertificationRequest发一下么。谢谢!我的邮箱是stormlyf@163.com
7 楼 linxinlong11007 2017-03-23  
你好,我需要FishermanJCE,请问能发份这个包给我么?328997553@qq.com
6 楼 candyo75 2016-10-11  
你好,我也需要这个例子的依赖的FishermanJCE相关的包 我百度都没有找到相关jar,请帮忙把相关jar发给我邮箱: 347043354@qq.com
5 楼 linpz 2013-05-13  
FishermanJCE 是山东渔翁公司加密卡提供调用加密机/加密卡的Jar包来的。。。
4 楼 lishifu2009 2012-04-11  
好像要用起来还需好多包啊。。。。。
我设置了
Security.addProvider(new fisher.man.jce.provider.FishermanJCE());
结果还报这个错误。。。
Exception in thread "main" java.lang.NoClassDefFoundError: com/fmjnicard/fm_jni_api
at fisher.man.jce.provider.FishermanJCE.<init>(FishermanJCE.java:90)
com/fmjnicard/fm_jni_api
能否再发下包哈哈。。。
多谢。。。
3 楼 lishifu2009 2012-04-11  
哈哈 好像还是不行。。。。。。。
Exception in thread "main" java.security.NoSuchProviderException: no such provider: FishermanJCE
at sun.security.jca.GetInstance.getService(GetInstance.java:66)
at sun.security.jca.GetInstance.getInstance(GetInstance.java:190)
at java.security.SecureRandom.getInstance(SecureRandom.java:293)
at testli.ww.main(ww.java:58)

麻烦帮我看看喽,谢了
2 楼 lishifu2009 2012-04-09  
您好,fisher.man.jce.PKCS10CertificationRequest 这个包给我发吧,我的邮箱:lishifu2009@qq.com  谢谢。
1 楼 ggh666 2012-02-29  
请问 假如有“a40ed786b2867685507a4abad7264dbff72341f79503e6ff5366703789a2a7d7” 这样的 数据 如何能还原成 privateKey 私钥的对象呢

相关推荐

    通过go语言,在线生成、解析pkcs10格式的X509证书请求文件

    通过go语言,在线生成、解析pkcs10格式的X509证书请求文件,支持rsa,sm2算法,底层使用openssl开源库。

    SM2软证书签发.zip

    5. 创建证书请求(CSR,Certificate Signing Request):CSR包含了申请者的公钥和一些标识信息,如组织名、地点等。使用`PKCS10CertificationRequestBuilder`构建CSR,并用私钥进行签名。 6. 签发证书:通常,CSR会...

    生成SM2公私钥(证书形式).rar

    SM2是一种基于椭圆曲线密码学(ECC)的公钥加密算法,它的安全性比传统的RSA算法更高,但密钥长度更短,因此在计算效率和资源消耗上更具优势。SM2算法包括公钥加密、私钥解密、数字签名和验证等几个核心部分。 接...

    PKCS7签名的ASN1格式

    可使用此格式,通过ASN1C生成完整的PKCS7签名C语言代码,实现诸如SM2算法数字签名及验证。 注意,CertificateSerialNumber本来在PKCS7标准ASN1结构中定义为INTEGER类型,但由于ASN1C将INTEGER类型翻译成long,不支持...

    Android SM2、SM3、SM4 算法支持 Service Provider 及证书制作软件包

    生成、解释、验算 PKCS#10 证书申请,签名算法支持 SM3withSM2、主流 RSA、DSA、ECDSA.... *** 无须打包 BouncyCastle 支持库,体积小、节约内存 *** 请参阅 testSM.java、testCERT.java 文件列表: 1、AndroidSM...

    js4rsa 基于javascript的ecc签名验签

    总结来说,这个压缩包提供了一套JavaScript实现的ECC签名和验证解决方案,包括了与X.509证书、ASN.1编码、RSA兼容性的支持,以及一个基于ECC的SM2算法示例。这使得开发人员能够在浏览器环境中进行安全的非对称加密...

    基于MIRACL库下的SM2密钥交换的实现

    SM2算法则是一种基于椭圆曲线密码学(ECC)的公钥加密和数字签名协议,它结合了椭圆曲线上的离散对数问题和双线性配对技术,提供了安全性和效率的平衡。 首先,SM2密钥交换涉及到两个主要步骤:生成密钥对和密钥...

    c01_SM3SM4_pkcs11_sm1_龙脉_sm2_源码.zip

    标题中的“c01_SM3SM4_pkcs11_sm1_龙脉_sm2_源码.zip”指示了这个压缩包包含的是与密码学相关的源代码,主要涉及到SM3、SM4、PKCS11、SM1以及龙脉(可能是指中国的加密技术或算法)和SM2等算法。这些是信息安全领域...

    java sm2国密工具类

    5. **兼容性和适配**:为了保证与其他系统或标准的兼容性,工具类可能还包含了与PKCS#7或CMS(Cryptographic Message Syntax)格式的转换功能,以便于数据交换。 6. **错误处理**:良好的工具类会提供适当的错误...

    C#SM2加密-解密-签名-验签源码+Demo已与JAVA联调

    它包含了对称加密、非对称加密、数字签名等功能,特别适合于移动设备和物联网设备,因为ECC在处理效率和安全性上都优于传统的RSA等算法。 在C#中实现SM2加密和解密,首先需要引入相应的库,如Bouncy Castle,这是一...

    6数字签名.pptx

    RSA数字签名体制是基于RSA公钥加密算法的一种数字签名方法。该方法利用了RSA算法中的私钥和公钥特性。发送方使用自己的私钥对消息进行签名,接收方则使用发送方的公钥来验证签名的有效性。 #### 6.3 基于离散对数的...

    密码学基础和PKI体系.pptx

    常见的公钥算法包括基于大整数因式分解的RSA、基于离散对数问题的Diffie-Hellman、DSA、Elgamal,以及基于椭圆曲线问题的ECC和SM2。公钥密码体系解决了密钥分发的问题,因为公钥可以公开,而私钥仅由拥有者掌握。 ...

    GMT 0031-2014 安全电子签章密码技术规范.pdf

    - 规范可能涉及PKCS#1标准,这是RSA加密算法的标准格式,用于公钥的编码和解码。 5. **安全性要求** - GMT 0031-2014对系统的安全性提出了严格要求,包括但不限于数据加密、访问控制、日志记录等方面。 - 为了...

    GMT 0019-2012 通用密码服务接口规范.pdf

    - **CA (Certification Authority)**:证书认证机构,负责签发和管理数字证书。 - **CN (Common Name)**:通用名,用于标识实体的名称。 - **CRL (Certificate Revocation List)**:证书撤销列表,列出了已被撤销的...

    精品资料(2021-2022年收藏)中国农业银行手机银行USB(1).doc

    K宝,也称为USBKey,是一种内置RSA协处理器的智能卡芯片设备,能在芯片内部生成和管理RSA密钥对,私钥始终安全地存储在芯片内部,保证了电子交易的安全性。二代K宝增加了显示屏和物理按键,提高了用户交互体验。通用...

    bcprov-jdk15on-1.50.jar

    2. **数字签名和证书**:Bouncy Castle支持创建、解析和验证X.509证书,以及多种签名算法,如RSA、DSA、ECDSA等。 3. **PKCS#7/PKCS#12**:这个库可以处理PKCS#7(Cryptographic Message Syntax)和PKCS#12...

    苹果一代KEY

    苹果一代KEY支持PKI架构,这是一套基于公开密钥密码学原理的、用于管理数字证书和公钥加密的安全体系结构。同时,它还支持标准的CSP(密码服务提供者)和PKCS#11(公钥密码标准#11),后者是一套由RSA实验室制定的...

    BouncyCastle.Crypto.dll,itextsharp.dll

    Bouncy Castle不仅提供了基本的加密操作,如加解密、数字签名和哈希,还支持更高级的功能,如PKCS#7(用于封装和验证数据)、PGP(用于电子邮件加密)以及X.509证书管理。这个库以其灵活、高效和全面的特性,成为了...

    苹果二代KEY

    苹果二代KEY支持PKI(公钥基础设施)架构,能够与标准的CSP(密码服务提供商)、PKCS#11等协议兼容,为用户提供了一套完整、高效的安全认证体系。此外,产品内部集成了多种算法加速引擎,包括AES、DES/3DES、RSA、...

Global site tag (gtag.js) - Google Analytics