- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我刚刚完成了一些 OpenSSL/PKCS7 数字签名代码的编写,现在有了一个可用的 PEM 编码 PKCS7 文件。因此,经过一番战斗后,我需要将该 PEM 转换为 DER 格式。事实证明这比我希望的要难。
OpenSSL 中有一些方便的方法,例如“PEM_write_bio_PKCS7_stream”来写入您的 PKCS7 对象。但是经过大量谷歌搜索和浏览一些头文件后,我似乎找不到任何东西来获取 PKCS7 对象并将其写入 DER 格式的任何内容(BIO、FILE、char*)。
因此我感到很失败,于是转而解析 PEM 文件中的页眉和页脚,并对内容进行 Base64 解码。作为检查,我用 Java 和 BouncyCaSTLe 做了这个,得到了我想要的。
这是我的代码。对于几乎所有的 Base64 解码器,我都会尝试将其转换成这样...
MIIHmwYJKoZIhvcNAQcCoIIHjDCCB4gCAQExCzAJBgUrDgMCGgUAMIIBrQYJKoZI
hvcNAQc ... Lots More stuff
... +8L5ad45D/7ZGJWafaSw==
进入...
0\202\233 *\367\367
\240\202\2140\202\21010 +
这是代码...
string PKCS7String(starting_point);
string PEM_PKCS7_HEADER("-----BEGIN PKCS7-----\n");
string PEM_PKCS7_FOOTER("\n-----END PKCS7-----");
string::size_type pos = 0;
while ( (pos = PKCS7String.find(PEM_PKCS7_HEADER, pos)) != string::npos ) {
PKCS7String.replace( pos, PEM_PKCS7_HEADER.length(), "" );
pos++;
}
pos = 0;
while ( (pos = PKCS7String.find(PEM_PKCS7_FOOTER, pos)) != string::npos ) {
PKCS7String.replace( pos, PEM_PKCS7_FOOTER.length(), "" );
pos++;
}
//Take your pick of decoders, they all do the same thing. Here's just the most recent
auto_ptr< uint8_t > decoded = decode(PKCS7String);
uint8_t* array = decoded.get();
cout << array << endl;
有什么想法吗?
最佳答案
PEM 文件只是 DER 文件的 Base64 编码版本,带有 -----BEGIN PKCS7-----
& -----END PKCS7-- ---
页眉和页脚行。
所以不确定在 Base64 解码后您希望看到什么......
作为测试:
以 PKCS#7 PEM 格式打包证书:$ openssl crl2pkcs7 -nocrl -out outfile.pem.p7b -certfile server.crt -outform pem
以 PKCS#7 DER 格式打包相同的证书:$ openssl crl2pkcs7 -nocrl -out outfile.der.p7b -certfile server.crt -outform der
使用您选择的解码器对 PEM 文件 (outfile.pem.p7b
) 的主体进行 Base64 解码,并将二进制输出与 DER 文件 (outfile.der) 进行比较.p7b
)
现在,恐怕这可能是您要求的,但不是您想要的......
关于c++ - PEM 转换 (PKCS7) 到 DER - 又名 Base64 C++ 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4600149/
我正在构建一个游戏,例如 Same Game ,当我必须创建一个新关卡时,我刚刚运行了一个算法来用 N 种颜色填充板子,这个算法随机填充板子,但显然以这种方式生成的关卡并不是都有解决方案。 我必须做一
有两个 TFLearn 项目 TF Learn (aka Scikit Flow) https://github.com/tensorflow/tensorflow/tree/master/tenso
我正在尝试使用代码从 NSDictionary 中解析一个整数 [activeItem setData_id:[[NSString stringWithFormat:@"%@", [dict valu
是否有在线资源描述 VC10 与 VC9 相比代码生成的变化? 我不是在谈论 c++0x 和其他不错的功能(例如内置 static_assert),也不是在谈论精致的 UI。我需要知道的是,由于优化、
那里。我是 Swift 的初学者,正在尝试将旧程序转换为 Swift3。我设法修复了一堆错误,但我无法使该功能正常工作。 fileprivate func extractEntitlements(_
我正在尝试实现 Easy Game Center link但我得到这个错误: Cannot convert value of type 'NSRange' (aka 'NSRange') to exp
我是 Swift 的新手,我正在尝试按照 lynda.com 上的类(class)编写一个简单的类(class)此代码在视频中运行良好,但在我的系统上出现错误。 protocol JSONDecoda
我的代码中有一个错误,例如“无法将类型‘NSRange’(又名‘_NSRange’)的值转换为预期的参数类型‘Range’(又名‘Range’)”,但我不知道如何解决这个问题请任何人帮助我? 我在这里
检查字符串字符的范围时出现此错误... @objc func textField(textField: UITextField, shouldChangeCharactersInRange range
我正在尝试用属性字符串替换子字符串。以下是我的代码。 let searchText = self.searchBar.text! let name = item.firstName ?? "" let
string convert(string name) { string code = name[0]; ... } 我从这一行得到“没有从'value_type'(又名'char')到'st
标题说明了一切,我相信。我只是好奇 () -> () 是否充当函数的参数... class Test { var isAwesome = true func loadData (callbac
我正在编写这个很棒的应用程序,至少我认为它很棒,在 C 中与 GObject 的完美结合,过了一段时间我开始遇到这个非常非常奇怪的错误。我也相信已经注意到它并不总是出现。然而,这可能只是 IDE 的错
我一直在尝试使用类型族来抽象 UI 工具包。当我尝试使用 HLists (http://homepages.cwi.nl/~ralf/HList/) 来改进 API 时,我陷入了困境。 我的 API
在 Scala 中,as explained in the PR that introduced it , parasitic允许偷窃 execution time from other thread
我在网上看到过这个关于加载效果的回车示例,但我无法正确理解它。为什么它必须是 2 \rLoading 而不是 1?有人可以给我解释一下吗? for (int j = 0; j < 3; j++) {
我有一个字符串列表 strs = [ 'foo', 'bar' ] 和一些字典 foo = {'a': 1, 'b': 2}, bar = {'a': 3, 'b': 4}。我想使用 with_ite
我有一个由许多点组成的LineString(坐标字符串),我想计算沿线最近的距离(从第一个点到最后一个点,方向性很重要)到一个点,就像这样说的:"project()" calculation 如果我不
所以最近我确实为我的业务购买了一些模板。它们基于 HTML/CSS/JQUERY/JS/PHP。 问题如下:在我的领域,并发率非常高,人们下载模板并自己使用它们是很常见的。由于我确实为它们付出了很多,
我认为这很容易找到预制的,但似乎我在网上找到的任何解决方案都只能解决部分问题。 我想对用户提供的文件名列表进行排序(这些文件大多以人和/或地址命名),有时使用不同的语言(主要是德语,带有一些法语和意大
我是一名优秀的程序员,十分优秀!