我有一个以这种方式创建的签名:
size_t siglenth = _signer.MaxSignatureLength();
QByteArray signature(siglenth, 0x00);
signature.reserve(siglenth);
siglenth = _signer.SignMessage(_prng,
(const CryptoPP::byte*) (message.constData()),
message.length(), (CryptoPP::byte*) signature.data());
Run Code Online (Sandbox Code Playgroud)
我的签名大小为 64,包含:
ECCD530E5F232B7C566CA5322F990B3D55ED91156DF3845C4B9105BFE57606DDD68F332A0A5BF7CAB673E4970D10109B72F11457ACD78CED11457ACD7894ED
从我在dsa.h文件中阅读的内容来看,这个签名目前是DSA_P1363格式。我需要将其转换为DSA_DER格式。
要执行此操作,我尝试:
QByteArray derSign(70, 0xFF);
size_t converted_size = CryptoPP::DSAConvertSignatureFormat(
(CryptoPP::byte*) (derSign.data()), sizeof(derSign.data()), CryptoPP::DSA_DER,
(CryptoPP::byte*) (signature.data()), sizeof(signature.data()), CryptoPP::DSA_P1363);
Run Code Online (Sandbox Code Playgroud)
此转换的输出如下所示。它似乎只是签名的第一部分。它的大小为 8,包含:
300D020500ECCD53
怎么了?
谢谢。
我已经计算了RSA密钥的n,e,d,p,q值.现在,如何使用openssl命令行工具生成私钥文件(pem或der)?
我在考虑
openssl asn1parse -genconf asn1.cnf -noout -out asn1.der
Run Code Online (Sandbox Code Playgroud)
但我无法理解如何构建conf文件.
我已经用 Java 生成了一个 ECDSA 签名,我想从中获取 R 和 S 值。据我了解,我生成的签名是 DER 编码的。有人可以向我提供一些 Java 代码(可能使用 Bouncy Castle)来将 R 和 S 值检索为 BigIntegers 吗?
注意:如果有帮助,我通过 JCE 的 Signature 类使用内置提供程序生成了签名,我的 P_256 EC 密钥对的签名长度通常在 70 到 72 字节之间徘徊。
我已经尝试过以下问题的答案:
使用bouncycastle / spongycastle读取加密的私钥
但是由于我调用时我的加密密钥已编码为DER
Object object = pemParser.readObject();
Run Code Online (Sandbox Code Playgroud)
对象为null。
我可以使用openssl的命令将其转换为PEM(它也会解密密钥)
openssl pkcs8 -inform der -in pkey.key -out pkey.pem
Run Code Online (Sandbox Code Playgroud)
但我需要读取其原始文件中的密钥
在我的应用程序中,我获得了一个 PEM 编码的证书,需要将其转换为不同的形式,以便以后将其用于 JWT 验证目的。我正在寻找的结果是证书中包含的公钥的 SecKey 表示、PEM 公钥字符串或转换为 DER 证书。
我对此非常陌生,所以我不知道如何解决这个问题。我在谷歌上搜索并没有找到明确的解决方案,甚至 Apple 文档也只提到了 DER 证书。如果我理解正确,一种解决方案是在我的应用程序中使用 OpenSSL(这甚至可能吗?)进行转换,但我找不到任何关于如何实现这一点的有用资源,所以我希望能更深入地了解正确的做法.
在应用程序之外进行转换不是我的选择。
这是我的方法:
import org.bouncycastle.asn1.ASN1InputStream;
import java.io.ByteArrayInputStream;
...
public static byte[] toDERBytes(byte[] data) throws IOException
{
ByteArrayInputStream inStream = new ByteArrayInputStream(data);
//Uses imported bouncy castle library:
ASN1InputStream asnInputStream = new ASN1InputStream(inStream);
byte[] derArray = asnInputStream.readObject().getEncoded();
asnInputStream.close();
return derArray;
}
Run Code Online (Sandbox Code Playgroud)
根据BouncyCastle文档,我看到 ASN1InputStream.readobject()实际上应该得到一个DER对象而不是ASN1.(据我所知,DER是ASN1的子类型)
然后我返回字节.
这有一半的时间,但另一半我得到这个错误:
java.io.IOException: DER length more than 4 bytes: XXX
Run Code Online (Sandbox Code Playgroud)
我的问题是:
以下是使用 ASN.1 DER 编码的证书示例
30 82 01 8F 30 81 F9 **A0** 03 02 01 02 02 01 01 30
0D 06 09 2A 86 48 86 F7 0D 01 01 05 05 00 30 0D
31 0B 30 09 06 03 55 04 03 0C 02 43 41 30 20 17
0D 31 33 30 39 31 35 31 35 33 35 30 32 5A 18 0F
32 31 31 33 30 39 32 32 31 35 33 35 …Run Code Online (Sandbox Code Playgroud) 我正在使用crypto模块来验证证书,但是我的证书和公共密钥都是DER格式。似乎该crypto模块不接受此格式。
有没有一种方法(或模块)使用NodeJS将DER转换为PEM格式?我找不到任何内容,也无法使用命令行通过shell 调用openssl。
更新:这与HTTPS证书无关。它是关于常规X.509证书的。如果您将问题标记为否定,请发表评论以证明其合理性。如果您无能为力,那就不要傻了。
我有一个进行转换的代码,但需要使用本机 PHP 函数进行转换,因为它没有激活对运行 exec 的支持:
exec("openssl pkcs8 -inform DER -in 'archivo.key' -out 'archivo.key.pem' -passin pass:'lacontrasena'");
Run Code Online (Sandbox Code Playgroud)
有人可以帮我把它翻译成原生 PHP 函数吗?它可以是openssl或图书馆。
//更新
这是我使用 der2pem 函数的代码:
function der2pem($der_data) {
$pem = chunk_split(base64_encode($der_data), 64, "\n");
$pem = "-----BEGIN PRIVATE KEY-----\n".$pem."-----END PRIVATE KEY-----\n";
return $pem;
}
$keyfile = 'myFileDER.key';
$keyFileContent = file_get_contents($keyfile);
$pemContent = der2pem($keyFileContent);
file_put_contents('llavetemp.pem', $pemContent);
$private_key1 = openssl_pkey_get_private($pemContent);
var_dump($private_key1);
Run Code Online (Sandbox Code Playgroud)
var_dump 返回布尔值 false
我遇到了一个我似乎无法解释的 CSR 生成问题,并且想知道是否有人可以帮助我执行命令,或者告诉我我正在生成什么。
我认为我正在生成 PEM 格式的 CRT 证书,但似乎我的密钥不是 PEM 格式!?
这就是我所做的,以及我得到的。我创建了一个 CSR:
openssl req -nodes -new -newkey rsa:2048 -sha256 -out test.csr
这会生成 2 个文件: privkey.pem和test.csr
现在,当我尝试更新某些服务器时,他们抱怨我的私钥不是 PEM 格式。nginx 和 apache 似乎对我的密钥很满意。
当我使用以下方法转换密钥时:
openssl rsa -in privkey.pem -out privkey.rsa.pem
有用 !?!
vimdiff 直观地显示了文件中的差异,可以看到不仅标题不同,而且内容也发生了变化(前 4 个字符之后)
因此我的问题
即使我指定不在创建行中使用 DER,密钥是否以 DER-PEM 格式创建?
der ×10
openssl ×4
pem ×4
asn.1 ×3
cryptography ×3
java ×3
rsa ×3
bouncycastle ×2
c++ ×1
crypto++ ×1
ecdsa ×1
javascript ×1
node.js ×1
php ×1
private-key ×1
sha ×1
swift ×1