在我的代码中,我生成了公钥/私钥对。我想将它们存储到 MSSQL2008 数据库表中。我当前的表有一个公钥列和一个私钥列,两者都是 varchar 类型。
有没有办法让我按原样存储密钥,或者我应该/应该将它们转换为 String 并将它们存储为 varchar 吗?
我的 Firefox/Thunderbird 版本高于 31 时有证书问题。由于未知原因,导入失败。我可以在旧版本的 F/T 中导入证书并再次导出,之后它在当前版本中运行良好。我发现证书之间的唯一区别是私钥属性。证书采用 pkcs12 格式。
首先我提取了私钥
openssl pkcs12 -in certificate.p12 -nocerts -out privatekey.pem
Run Code Online (Sandbox Code Playgroud)
然后我打印出详细信息
openssl rsa -in privatekey.pem -text -noout
Run Code Online (Sandbox Code Playgroud)
我从我的旧证书和导出的证书中得到完全相同的输出,除了 prime1、prime2 和 exponent1、exponent2 被切换并且系数不同。
有没有简单的方法可以用命令解决问题?也许是一个 openssl 命令?
附加信息:
来自工作导出私钥的 prime1 和 prime2。在旧的私钥中,它的输出完全相同,但 prime1 和 prime2 相同,反之亦然。
prime1:
00:f6:63:95:7c:1a:96:4f:33:c7:dd:3f:a4:dc:7d:
00:5f:e3:0e:93:d7:2f:88:d1:44:f3:2b:75:38:00:
18:bb:19:ba:af:ac:20:34:93:d0:42:fb:d7:73:66:
f6:cc:d8:10:b1:31:ea:f8:79:5d:f5:08:56:2f:2d:
d8:31:e6:6e:62:92:89:eb:1e:44:31:ed:92:0a:a1:
02:ef:f5:f7:7c:2c:a0:26:60:5b:95:3a:a4:44:fa:
dc:ce:99:88:88:d7:f2:25:1d:48:6f:c6:b4:72:d0:
b0:50:59:18:e8:81:c7:13:45:e2:04:38:8f:d7:53:
50:0a:7a:44:8f:21:e9:d4:bd
prime2:
00:96:4a:84:35:b9:bd:0c:f4:00:e1:d4:2e:f7:49:
ce:a5:0f:3d:90:83:ad:5b:7b:e0:06:a4:a1:6a:bd:
2e:7c:3c:b8:1c:f1:b9:45:fc:41:00:ec:70:5b:ba:
00:21:62:df:54:07:9a:b1:09:93:89:27:f8:29:55:
bf:90:81:ea:07:ef:0f:dd:ca:11:da:d6:aa:e7:de:
16:6c:68:52:fe:51:e6:20:46:3c:97:af:e2:a6:fd:
ef:bb:e3:08:9d:13:18:88:51:73:ae:81:15:7c:1b:
86:52:d5:16:cc:86:66:8e:b8:48:b9:6c:14:27:10:
82:8e:04:e6:ea:25:af:20:53
Run Code Online (Sandbox Code Playgroud) 问题的答案
如何在 PKCS#11 模块上使用私钥而不是 perivate 密钥文件在 OpenSSL 中进行相互身份验证?
非常清楚地解释了使用存储在智能卡或 HSM(硬件安全模块)上而不是普通文件上的私钥建立 SSL 连接所需的步骤。其实我想用python做同样的事情,但首先我必须了解背后的原理。所以暂时忘记python:
假设密钥已经存在于 HSM 上的“SecureToken”下。所以
我首先必须从引擎加载私钥:
EVP_PKEY* key = ENGINE_load_private_key(e, "SecureToken", NULL, &cb_data);
然后必须打电话
SSL_CTX_use_PrivateKey(SSL_CTX *ctx, EVP_PKEY *pkey);
现在,我有一个带有 PKCS#11 接口的 HSM,我可以将其作为 openSSL 引擎加载。慢慢地我对原理有了更好的了解,但是,私钥如何离开模块仍然是个谜:为了将私钥始终保存在模块内,这就是我完全使用 HSM 的原因。
具体来说:我从 1) 中调用的返回值中返回什么作为“键”?我无法想象密钥内容是从 HSM 中读出的,因为 PKCS#11 甚至不支持此操作。我还能得到什么?它只是有关HSM 中密钥的元信息而不是密钥本身吗?并且 SSL_CTX * ctx 稍后如何知道,该“密钥”将如何使用?
鉴于 PKCS#11 引擎已正确加载,这是否意味着任何 RSA 函数都会与存储在上下文中的“元密钥信息”一起自动委托给 HSM ?
请确认这个假设或让我知道我错在哪里。
无论如何,我发现了 EVP_PKEY 是什么:
struct evp_pkey_st {
int type;
int save_type;
int references;
const EVP_PKEY_ASN1_METHOD *ameth;
ENGINE *engine;
union …Run Code Online (Sandbox Code Playgroud) 我在为 Google Drive 授权创建 JWT 时遇到问题。该说明在此链接中给出。
<?php
//helper function
function base64url_encode($data) {
return rtrim(strtr(base64_encode($data), '+/', '-_'), '=');
}
//Google's Documentation of Creating a JWT https://developers.google.com/identity/protocols/OAuth2ServiceAccount#authorizingrequests
$raw_key_data="-----BEGIN PRIVATE KEY-----\nMIIEvAIBADANBgkWhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCLJN7B2USp0bTH\n7aVt1K/pAJa9rgUEkebbRQUPEopManZHgJK8SMzq5nUM3OOVlTdyDyuzxUZW65Y+\nR1xajNHSidE+rJJ3MWwuevXBuUws5oiA+DXJBB6FsTtHDvUPT7sePbJx8Y80S1Jr\nB3apJNdohjSef4UihgjJ93A0PgeSVz7CeUKxrBHdGiK2Ikf7wTCzcRzz/15I6QLu\ncsNbWxo0+koXo9D0+wT3RN+riSyTa2WwYn//B8v6VmDPVrcjxETEXraAIMpqURtK\n4BuK4Qp2pSd1u2zrGc58BVGuT6+nPVpmX6wiZ21sqOulTzgIOXKIuc4zdKvZ+jz/\n1jst3ertAgMBAAECggEADRGn+IYbLGYdeD/Kb2/wG87p2aP8Jas8hzDK4lkH81h2\nho29eoDN+mwt50jh+V08CXMCVE69phFXmb7jHkAmvwMhy6Sy1w4lzpHO/mSUko0O\nmip2BszjvwPgAPMXMlp3RUZfOdOJ80v10Eaxrv5eWxtr2s04aH81WR7sA4Ql+uki\nbTiLbo4odpMVPkoJZATZKQd+L/bBM4a+b3IM87/TE7skMrSgQE6cnjjTI5Uk+WSl\nxjiZvj5XmticW3vPavL/ZXPEZqy5IxvcxdF5rGHCHVu4ah0CmDdc9A3jF0flhewK\nV6mOViqbKGInnMn4kt3l4C3+wF2+dge6t8BQ/TMtwwKBgQDBnpjiC+wRVQy36KCs\ntYdZ60ykuQeKqMyACt6FvC74xy+PjLVntxDaYArva2PVaZSm9B2FgGHPz9AfW80/\n1ZeNHcuwymni8n+4MNpQbJuhuHK8UjSo0rFq6Nrddi9RCjzASSX8s4Dlm01VM65b\nKBnM5p50I9QEY4F4gSZfLLMNowKBgQC3+Tpz23qhkxJPu9cVuvPRFfg1y0NNsp7k\n0qHYMegz1GHoMVs1kg36OtbROqpG2+rIrj0JWTGwLO14fX2TY0jWfao21CGrpkXM\nlY1KSDIMuQv6pd5yh74oqvDDpZwKxxu/nmzcQbd1lN/nFkEW5g0b7e27UoCoovwS\n7qSENbqOLwKBgHYWp8H+aX1stPQZ8p1DngiupTE2FK5yIz/Y4T0JuFBNE+nmdOGL\n2sCFoUXC5sHLwjlNXBAHbCCV66akk/th5yvPR2NNIOWk51bMnOo+Q3GQEJJhRPLO\nhhzhZlN5+IPhzYmtU3jbdjsTzEex3J6GR64b3fqRu4bttZJsmp2jopUnAoGAWW+7\nzt7/+tR4rnJu2Y2NQjQf+mbaTUddb2kWbPe2Hpw9DJgR8zURvngkPor6hIAc33p1\nCbpmwXLV7yFyjthRbJSizwzJYZzvicmaamY2jqDXBf7k6WC8PSD88t/rwAGTp8/o\ntBruiSbawoi7E9q6vL0qOUqeaVzylnGVYQCNtNkCgYBwqL1MNTR8IrXDfZyYdDRP\nWNCRqm7ymuQi7IUKVa+yaBM1ubvEe7EPrlZWlFPDdPmaScx02Qwf++xcGHWzzDX0\nQPmd95OTGafvECXuKVy2NAf2AdCYVruL+17wfPhuz7ANIpgEqsiNAZNe0GtGBjyZ\nVuiSVVML3jW4XUtf63V0/A==\n-----END PRIVATE KEY-----\n";
$private_key = openssl_get_privatekey($raw_key_data);
if ($private_key === FALSE)
{
error_log ("Unable to extract private key from raw key data: " . openssl_error_string());
};
print("$private_key\n");
//{Base64url encoded JSON header}
$jwtHeader = base64url_encode(json_encode(array(
"alg" => "RS256",
"typ" => "JWT"
)));
//{Base64url encoded JSON claim set}
$now = time();
$jwtClaim = base64url_encode(json_encode(array( …Run Code Online (Sandbox Code Playgroud) 我正在使用 GetSecretAsync() 方法从 Azure Key Vault 获取证书,然后我希望最终获得私钥和证书的 byte[]。
我的应用程序位于 .netcore3.1 这是我的代码的样子:
var certWithPrivateKey = Client.GetSecretAsync(ConfigurationSettings.AppSettings["AKVEndpoint"], ConfigurationSettings.AppSettings["CertName"]).GetAwaiter().GetResult();
var privateKeyBytes = Convert.FromBase64String(certWithPrivateKey.Value);
X509Certificate2 x509Certificate = new X509Certificate2(privateKeyBytes);
var privateKey = x509Certificate.GetRSAPrivateKey() as RSA;
Run Code Online (Sandbox Code Playgroud)
我得到了 RSACng 类型的有效私钥,但任何操作(尝试过 ExportRSAPrivateKey())都会引发“'privateKey.ExportRSAPrivateKey()' 引发类型为 'Internal.Cryptography.CryptoThrowHelper.WindowsCryptographicException'” 的错误和“The不支持请求的操作。”
我不知道接下来如何继续获取私钥和证书的字节[]。
const solanaWeb3 = require("@solana/web3.js");
const solanatoken = require("@solana/spl-token");
var wallet = solanaWeb3.Keypair.generate();
console.log("public key...", wallet.publicKey);
console.log("secret key...", wallet.secretKey);
console.log("secret key...", JSON.stringify(wallet.secretKey.toString()));`enter preformatted text here`
Run Code Online (Sandbox Code Playgroud)
我有
public key... PublicKey {
_bn: <BN: b5ec974285759f4004555c6890e045a4ce857c6a056895d77dd209c054e76556>
secret key... "211,55,244,72,160,174,33,152,24,226,97,172,91,91,47,3,148,83,99,188,150,111,153,248,253,237,31,223,194,194,199,0,181,236,151,66,133,117,159,64,4,85,92,104,144,224,69,164,206,133,124,106,5,104,149,215,125,210,9,192,84,231,101,86"
Run Code Online (Sandbox Code Playgroud)
我怎样才能得到private key,比如
kNykCXNxgePDjFbDWjPNvXQRa8U12Ywc19dFVaQ7tebUj3m7H4sF4KKdJwM7yxxb3rqxchdjezX9Szh8bLcQAjb
用于幻影钱包?文档:https ://solana-labs.github.io/solana-web3.js/classes/Keypair.html
我想将我的应用上传到应用商店.我的客户已经为他的帐户上传了自己的苹果ID.我试图在我的Mac上安装我客户帐户的分发证书,但它不适用于我.该证书中缺少私钥.
我需要做些什么才能工作?
我需要在WebSphere Portal 6.1上运行的应用程序中使用数字签名.是否有任何API可以从服务器密钥存储中检索java.security.PrivateKey?我想在我的应用程序源代码中避免使用密钥存储和存储密码的显式路径.
我向您发送使用pvt1(私钥)加密的数据。
那么如何打开此文档?
没有我pvt1,你怎么能打开它?
如果您可以使用pvt2钥匙打开,那么pvt1和pvt2钥匙之间是否应该没有关系?
否则,如何打开我的文档?
如果您需要我pvt1打开文件,那么在交换钥匙之前我们会见面吗?
我已经成功创建了私钥和公钥,并对消息进行了编码,但是在解码消息时,我抛出了错误
到目前为止,我的代码是:
require 'openssl'
require 'base64'
key = OpenSSL::PKey::RSA.generate(2048)
pri_key = key
pub_key = key.public_key
string = 'Hello World!';
rsa_public_key = OpenSSL::PKey::RSA.new(pub_key)
encrypted_string = Base64.encode64(rsa_public_key.public_encrypt(string))
puts "Encrypted Message:"
puts encrypted_string
# This creates an error
my_string = pri_key.private_decrypt(encrypted_string)
puts "The decoded message"
puts my_string
Run Code Online (Sandbox Code Playgroud)
打印编码后的消息后抛出此错误
Example Decrypt.txt:25:in `private_decrypt': data greater than mod len (OpenSSL::PKey::RSAError)
from Example Decrypt.txt:25:in `<main>'
Run Code Online (Sandbox Code Playgroud) 我有两个带有私钥的服务器(实例),我想更改这些密钥而不停止服务器(实例)或创建新的密钥。
这可能吗?
amazon-ec2 amazon-web-services public-key key-pair private-key
这是我的KeyPair生成方法:
try {
KeyPairGenerator keyGen = KeyPairGenerator.getInstance("ECDSA", "BC");
SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
ECGenParameterSpec ecSpec = new ECGenParameterSpec("prime192v1");
// Initialize the key generator and generate a KeyPair
keyGen.initialize(ecSpec, random); // 256 bytes provides an
// acceptable security level
KeyPair keyPair = keyGen.generateKeyPair();
// Set the public and private keys from the keyPair
privateKey = keyPair.getPrivate();
publicKey = keyPair.getPublic();
System.out.println("Private and public keys:");
System.out.println("PRIVATE: " + StringUtil.getStringFromKey(this.privateKey));
System.out.println("PUBLIC: " + StringUtil.getStringFromKey(this.publicKey));
} catch (Exception e) {
throw new RuntimeException(e); …Run Code Online (Sandbox Code Playgroud) private-key ×12
cryptography ×3
public-key ×3
java ×2
openssl ×2
rsa ×2
.net-core ×1
amazon-ec2 ×1
app-store ×1
blockchain ×1
c# ×1
certificate ×1
distribution ×1
encryption ×1
generate ×1
hsm ×1
ios ×1
javascript ×1
jwt ×1
key-pair ×1
php ×1
pkcs#11 ×1
private ×1
recover ×1
ruby ×1
sign ×1
solana ×1
sql-server ×1
websphere-7 ×1