问题标签 [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.
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 格式封装解密数据。现在的问题是如何在执行真正的解密之前解码信封。
有什么建议我可以如何执行解码?
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>
我的专业文件看起来像这样。
string - 没有封送处理的系统字符串到标准字符串
如果我不允许使用,有什么方法可以转换System::String
为?std::string
msclr/marshal_cppstd.h
原因是我需要cryptlib.h
在同一个项目中使用,当我同时包含两者时出现错误:
由于类型名称冲突,cryptlib.h 和 wincrypt.h 不能同时使用
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 函数。
噗,希望有大神指点一下。。。
c++ - #define 编译时出错
我正在尝试从 Cryptlib 编译代码。但是我在这个文件的第 96 行出错了。
我还在 mingw 的 gthr.h 中遇到了其他几个错误。
我在 Windows 下使用 mingw 4.8.1 进行编译。
我得到 debug.h 第 96 行的错误
编辑 1:
我更改了文件以使用第 93 行定义 static_assert。但是我在 mingw 的 typetrait 文件中收到一个新错误。
错误是:
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?)。谢谢!!
export - 从 cryptlib p15 文件中导出私钥
我需要从 CRYPTLIB 创建/维护的 .p15 密钥集中提取 RSA 私钥。我能够打开密钥集 (CryptOpenKeyset),并将其加载到 CRYPT_CONTEXT (cryptGetPrivateKey) 中,但现在呢?理想情况下,我需要它以 PEM 格式供 OPENSSL 使用。如何才能做到这一点?
c# - AES 中的流密码加密
我在 C# 中实现 AES 256 位算法,但我正在加密需要填充的 128 位纯文本块,所以我不想填充并希望使用流密码
- 使用流密码而不是使用 128 位块
逐字节加密流
/li>
c - 使用外部数字签名在 C 中创建 pkcs#7 对象
我正在使用用于签署 pdf 文档的智能卡设备。我已经知道如何使用 itext 签署 pdf。
我有一个 20 字节的 sha-1 哈希、256 字节的签名(由智能卡私钥加密的 rsa)和一个公钥(.cer 证书)
有没有办法使用 cryptlib 等免费库在 C 中创建 pkcs#7 二进制对象?