问题标签 [cryptlib]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1962 浏览

java - 使用 Java 解码 cryptlib 编码的文本(不使用 cryptlib)

你好。

首先:我是stackOverflow和我正在谈论的主题的新手......
我试图避免在我的Java应用程序中使用cryptlib库进行TripleDES加密(现在我正在使用AES - 以确保向下兼容性我还希望能够解码使用 cryptlib 库创建但不使用 JNI 的字符串)。
但是我现在尝试的所有方法都不适合我。

配置:
算法: TripleDES
模式: CBC
格式: CRYPT_FORMAT_CRYPTLIB
密钥的大小为 16 字节(不方便,但 BouncyCastle 会支持)。
并且加密数据的大小不是8 的倍数(例如 81 字节)。

在我的库包装器中(也在 C 中),上下文是这样创建的:

信封是这样创建的:

我认为问题在于格式(因为它是“cryptlib 本机”格式) - 我在网上找不到任何关于它的描述......

目前我最好的尝试是这个:

我也尝试了不同的填充,但我总是以这两个例外之一结束:

  • javax.crypto.IllegalBlockSizeException:数据未对齐块大小
  • javax.crypto.IllegalBlockSizeException:最后一个块在解密中不完整

我有点绝望,所以如果有人能帮助我,我会很高兴...

编辑: 这是加密代码(CryptData.cpp):

编辑 2: 相比之下,它与此邮件列表中描述的实现相同。
但我想用Java解码它......

编辑 3: 我认为问题在于,加密数据被封装在 cryptlib 中(如代码所示)。

编辑 4: 我知道问题在于包围。cryptlib 使用创建的 crypt 上下文的会话密钥以 CRYPT_FORMAT_CRYPTLIB 格式封装解密数据。现在的问题是如何在执行真正的解密之前解码信封。
有什么建议我可以如何执行解码?

0 投票
0 回答
363 浏览

qt - 将 Cryptlib 库与 Qt 创建者链接

我有基于 Qt 5.0 的 Qt Creator 2.6.1 我已经用 Visual Studio 2010 构建了 cryptlib

当我构建项目时,所有 cryptlib 项目都在 C:\SDK\cl342 上,crypt.h 和 cl32.lib 和 cl32.dll 都在这个文件夹中 C:\SDK\cl342

我从 cryptlib 调用的每个方法(例如 cryptInit)上都出现链接器错误,我尝试从项目菜单中添加它并添加外部库,它对 pro 文件进行了很多更改,但甚至不允许我包含 crypt.h。

mainwindow.obj:-1: 错误: LNK2019: 函数“public: __thiscall MainWindow::MainWindow(class QWidget *)”中引用的无法解析的外部符号_cryptEnd@0 (??0MainWindow@@QAE@PAVQWidget@@@Z) –< /p>

我的专业文件看起来像这样。

0 投票
1 回答
226 浏览

string - 没有封送处理的系统字符串到标准字符串

如果我不允许使用,有什么方法可以转换System::String为?std::stringmsclr/marshal_cppstd.h

原因是我需要cryptlib.h在同一个项目中使用,当我同时包含两者时出现错误:

由于类型名称冲突,cryptlib.h 和 wincrypt.h 不能同时使用

0 投票
0 回答
435 浏览

pfx - Cryptlib 错误写入 .p12 “不存在与正在添加的证书相对应的密钥”

过去,我们使用 CryptLib 的(windows)包来处理 RSA 加密。现在我们想将我们的客户转移到一个不喜欢使用 CryptLib 的新平台。我们创建了一切,剩下的就是导入私钥。

密钥存储在 CryptLib 的密钥集存储 (pkcs#15) 中。在谷歌上搜索时,大多数(10 年前的)邮件都说“你不想要那个”,“作者故意阻止那个”等。似乎没有软件可以处理 pkcs#15,而安全提供程序库作者不不想创建支持,因为没有人使用它。

似乎只有一条出路:以 pfx / pkcs#12 格式存储私钥。这种格式的支持要好得多。

要使用 pkcs#12,您必须启用一个标志并重新编译 cryptlib dll。我这样做了,并且能够调用 pkcs#12 例程。

我使用 dll 的 delphi 包装器来使内容可读: // 从磁盘 ks 加载密钥集 (p15) := TCryptKeyset.Create(CRYPT_KEYSET_FILE, pansichar(fname), CRYPT_KEYOPT_NONE);

第一个测试是编写一个 p15 存储,效果很好(创建的存储几乎与原始存储相同,当然密码已更改)。但第二次写入 p12 存储时出错。如果我追查源头,这与我提供的私钥被视为证书有关。并且因为还没有私钥,所以它失败并出现以下错误。

我希望有人曾经使用过 cryptlib 的 pcs#12 功能,或者知道另一种处理这种情况的方法。如果解决方案是在python、php、c#、delphi...

2014 年 4 月 22 日更新我使用了 cryptlib self 的 C# 包装器,并重写了代码(以防 Delphi 包装器引起问题),但我得到了相同的结果:(

更新#2

查看测试,在测试中生成了一个 .p12 IS。对于一个全新的 .p12 文件也有一些摆弄。但是原始密钥是从 .p12 中读取的,因此它可能包含写回文件所需的信息......让我们再检查一下......

UPDATE #3 修改了 cryptlib 的 unittests 以从我的 .p15 密钥库中获取测试私钥,然后将其写入 p12 密钥库,但似乎在设置私钥时,将一个空的 pkcs12_info 结构传递给 set item 函数。

噗,希望有大神指点一下。。。

0 投票
1 回答
177 浏览

c++ - #define 编译时出错

我正在尝试从 Cryptlib 编译代码。但是我在这个文件的第 96 行出错了。
我还在 mingw 的 gthr.h 中遇到了其他几个错误。
我在 Windows 下使用 mingw 4.8.1 进行编译。

我得到 debug.h 第 96 行的错误

编辑 1:
我更改了文件以使用第 93 行定义 static_assert。但是我在 mingw 的 typetrait 文件中收到一个新错误。

错误是:

0 投票
0 回答
98 浏览

openssl - Cryptlib 中 aes_mode_reset() 的 OpenSSL 等价物是什么?

由于冲突,我需要将 CryptLib 迁移到 OpenSSL。

我(想我)发现了一些我需要的差异,如下所示,格式为cryptlib_function => openssl_function

我不确定的是:

cryptlib 中的注释在那里说:

寻找 aes_ctr 我看到一个AES_ctr128_encrypt和一个隐藏的“aes_ctr_cipher”,但不确定它们是否匹配。128让我想也许openssl仅限于aes128并且不支持我需要的aes256,这意味着我想我会将openssl部分迁移到cryptlib。

无论如何,重置模式的方法是什么(是否只是在再次调用之前清除 IV?)。谢谢!!

0 投票
1 回答
522 浏览

export - 从 cryptlib p15 文件中导出私钥

我需要从 CRYPTLIB 创建/维护的 .p15 密钥集中提取 RSA 私钥。我能够打开密钥集 (CryptOpenKeyset),并将其加载到 CRYPT_CONTEXT (cryptGetPrivateKey) 中,但现在呢?理想情况下,我需要它以 PEM 格式供 OPENSSL 使用。如何才能做到这一点?

0 投票
1 回答
190 浏览

c++ - cryptlib cryptSignCert 失败

我实际上正在编程和端到端加密日历。为此,我正在使用cryptlib。我或多或少地复制了手册中的代码。但总是,当我尝试生成根 ca. 它在 cryptSignCert() 处以错误代码 -2 失败。(这意味着,根据手册,第二个参数有问题)
这里有一个小代码来重现这个问题。

在此先感谢大卫。

0 投票
1 回答
804 浏览

c# - AES 中的流密码加密

我在 C# 中实现 AES 256 位算法,但我正在加密需要填充的 128 位纯文本块,所以我不想填充并希望使用流密码

  1. 使用流密码而不是使用 128 位块
  2. 逐字节加密流

    /li>
0 投票
1 回答
370 浏览

c - 使用外部数字签名在 C 中创建 pkcs#7 对象

我正在使用用于签署 pdf 文档的智能卡设备。我已经知道如何使用 itext 签署 pdf。

我有一个 20 字节的 sha-1 哈希、256 字节的签名(由智能卡私钥加密的 rsa)和一个公钥(.cer 证书)

有没有办法使用 cryptlib 等免费库在 C 中创建 pkcs#7 二进制对象?