PHP生成JWK

上代码:

<?php

//生成rsa公钥私钥
$methods = openssl_get_md_methods();
echo "<pre>";
print_r($methods);
echo "</pre>";
createKey();

function createKey(){

	$config = [
		'digest_alg'=>'SHA256',  //摘要算法或签名哈希算法,通常是 openssl_get_md_methods() 之一。
		'private_key_bits'=>2048,
		'private_key_type'=>OPENSSL_KEYTYPE_RSA,
	];

	$res = openssl_pkey_new($config); 

	//提取私钥
	openssl_pkey_export($res, $private_key);

	//生成公钥
	$public_key = openssl_pkey_get_details($res);
	// var_dump($public_key);

	$public_key=$public_key["key"];

	//显示数据
	echo "<pre>";   //私钥
	print_r($private_key);
	echo "</pre>";   

	file_put_contents('private.pem', $private_key);

	echo "<pre>";   //公钥
	print_r($public_key);
	echo "</pre>";  
	file_put_contents('public.pem', $public_key);

	$keyInfo = openssl_pkey_get_details(openssl_pkey_get_public($public_key));
	$jsonData = [
		            'kty' => 'RSA',
		            'n' => rtrim(str_replace(['+', '/'], ['-', '_'], base64_encode($keyInfo['rsa']['n'])), '='),
		            'e' => rtrim(str_replace(['+', '/'], ['-', '_'], base64_encode($keyInfo['rsa']['e'])), '='),
		            'use'=>'sig'
	        	];

	echo $jwk = json_encode($jsonData);

	file_put_contents('public.jwk',$jwk);

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在QT C++中使用OpenSSL生成jwk,可以参考以下步骤: 1. 首先,需要安装OpenSSL库。可以在官网上下载对应的安装包进行安装。 2. 在QT C++项目中添加OpenSSL库的头文件和库文件。在.pro文件中添加以下代码: ``` INCLUDEPATH += /usr/local/ssl/include LIBS += -L/usr/local/ssl/lib -lssl -lcrypto ``` 3. 编写生成jwk的代码。可以参考以下代码: ``` #include <openssl/rsa.h> #include <openssl/pem.h> #include <openssl/evp.h> #include <openssl/bio.h> #include <openssl/err.h> #include <QJsonObject> QJsonObject generateJWK(int keySize) { QJsonObject jwk; // 生成RSA密钥对 RSA* rsa = RSA_generate_key(keySize, RSA_F4, NULL, NULL); // 将RSA密钥对转换为PEM格式 BIO* bio = BIO_new(BIO_s_mem()); PEM_write_bio_RSAPrivateKey(bio, rsa, NULL, NULL, 0, NULL, NULL); size_t privateKeyLen = BIO_pending(bio); char* privateKey = new char[privateKeyLen + 1]; BIO_read(bio, privateKey, privateKeyLen); privateKey[privateKeyLen] = '\0'; BIO* pubkeyBio = BIO_new(BIO_s_mem()); PEM_write_bio_RSA_PUBKEY(pubkeyBio, rsa); size_t publicKeyLen = BIO_pending(pubkeyBio); char* publicKey = new char[publicKeyLen + 1]; BIO_read(pubkeyBio, publicKey, publicKeyLen); publicKey[publicKeyLen] = '\0'; jwk.insert("kty", "RSA"); jwk.insert("n", QByteArray(reinterpret_cast<const char*>(rsa->n->data), rsa->n->length).toBase64(QByteArray::Base64UrlEncoding | QByteArray::OmitTrailingEquals)); jwk.insert("e", QByteArray(reinterpret_cast<const char*>(rsa->e->data), rsa->e->length).toBase64(QByteArray::Base64UrlEncoding | QByteArray::OmitTrailingEquals)); jwk.insert("d", QByteArray(reinterpret_cast<const char*>(rsa->d->data), rsa->d->length).toBase64(QByteArray::Base64UrlEncoding | QByteArray::OmitTrailingEquals)); jwk.insert("p", QByteArray(reinterpret_cast<const char*>(rsa->p->data), rsa->p->length).toBase64(QByteArray::Base64UrlEncoding | QByteArray::OmitTrailingEquals)); jwk.insert("q", QByteArray(reinterpret_cast<const char*>(rsa->q->data), rsa->q->length).toBase64(QByteArray::Base64UrlEncoding | QByteArray::OmitTrailingEquals)); jwk.insert("dp", QByteArray(reinterpret_cast<const char*>(rsa->dmp1->data), rsa->dmp1->length).toBase64(QByteArray::Base64UrlEncoding | QByteArray::OmitTrailingEquals)); jwk.insert("dq", QByteArray(reinterpret_cast<const char*>(rsa->dmq1->data), rsa->dmq1->length).toBase64(QByteArray::Base64UrlEncoding | QByteArray::OmitTrailingEquals)); jwk.insert("qi", QByteArray(reinterpret_cast<const char*>(rsa->iqmp->data), rsa->iqmp->length).toBase64(QByteArray::Base64UrlEncoding | QByteArray::OmitTrailingEquals)); jwk.insert("privateKey", privateKey); jwk.insert("publicKey", publicKey); // 释放RSA密钥对和BIO RSA_free(rsa); BIO_free_all(bio); BIO_free_all(pubkeyBio); return jwk; } ``` 4. 调用生成jwk的函数,并将生成jwk保存到文件中: ``` QJsonObject jwk = generateJWK(2048); QFile file("jwk.json"); if (file.open(QIODevice::WriteOnly)) { QJsonDocument doc(jwk); QByteArray data = doc.toJson(QJsonDocument::Indented); file.write(data); file.close(); } ``` 以上就是使用OpenSSL在QT C++中生成jwk的步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值