问题标签 [cryptoapi]
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.
c++ - 为什么我的解密函数更加加扰密文,而不是解密它?
我创建了这个程序,它可以加密找到的文件,然后可以稍后通过 CryptDecrypt 函数对其进行解密。该函数成功,但不是将文件解密回纯文本,而是使文件看起来更加加密。
我把 CryptEncrypt 函数和 CryptDecrypt 函数都放在了,这样你就可以少看我做错了什么。我正在使用 Win32 API 的另一件事,没有 MFC 或 ATL。
windows - MS CSP:AT_SIGNATURE 和 RSA_KEY_SIGN(以及 AT_KEYEXCHANGE 和 CALG_RSA_KEYX)之间的区别
我正在为我公司销售的智能卡编写 CSP 库(用于 CryptoAPI)。
我对私钥的 AT_SIGNATURE 密钥类型和 CALG_RSA_SIGN 算法之间的区别有疑问(AT_KEYEXCHANGE 和 CALG_RSA_KEYX 也是如此)。
我知道 MSDN 网站上写的是什么,但是如果在调用 CPGenKey() 函数时指定了 CALG_RSA... 算法中的任何一个,CSP DLL 应该如何工作?我的意思是它应该生成会话 RSA 私钥还是应该生成密钥并将其保存在卡上?或者它可能取决于在 CPAcquireContext() 调用(即 CRYPT_VERIFY_CONTEXT 即)中指定的标志,并且 AT_SIGNATURE 应该定义为“签名的默认算法”,对于我们的卡来说是 RSA?
谢谢
smartcard - 使用 3rd 方 CSP 从 cryptoApi 或 CAPICOM 访问特定的 ADPU 函数
我已经尝试了过去 2 个月没有成功,我想是时候在这里问了。
我有一张智能卡,并从我的客户那里得到了一个CSP。我有描述我可以(并且知道如何)运行的APDU 命令的文档。
我需要将小文件(数据)保存到卡中,例如姓名、地址、照片等。然后保存证书。
在我读到的文档中,您必须进行外部身份验证才能稍后使用安全消息传递来访问卡上的文件。我在相互身份验证算法的某个地方有错误(需要计算 MAC、DES、TRIPPLE DES 等,我已经尝试了几周才能让它工作......)我知道如何在卡上做所有事情,除了需要相互验证的功能验证。
我查看了 CSP 提供的功能,并没有看到任何外部身份验证。我看到非 APDU 级别外部身份验证的唯一地方是在“Windows 智能卡微型驱动程序规范”中,我看到的功能如下:CardAuthenticateEx。但我不知道如何调用它们(它们在哪个 dll 中)。这些功能是否应该在 CSP 中?
当我拥有 CSP 时,使用 APDU 命令进入低级别是错误的方法吗?我应该改用 CryptoAPI 还是 CAPICOM?如果是这样,那么如果没有(或我找不到)可以写入文件的函数,我如何进行外部身份验证和使用文件。(同样,所有这些功能都在“Windows 智能卡微型驱动程序规范”中。
certificate - 如何强制 makecert 将私钥输出到文件(而不是 Crypto 存储)?
我想生成一个密钥对以在我的应用程序中使用,但是从 mmc 手动导出它们很痛苦。
如何使用命令行参数,或者以其他方式最终获得位于硬盘驱动器上的私有证书,适合以后分发?
linux-kernel - 如何在 linux 内核 2.6 中使用 CryptoAPI
我一直在寻找一段时间,但没有找到足够的文档/示例来说明如何使用 linux 附带的 CryptoAPI 创建系统调用/在内核领域。
如果有人知道好的来源,请告诉我,我想知道如何仅在内核空间内执行 SHA1 / MD5 和 Blowfish / AES。
cryptography - 如何从 XML 或本机代码中的模数/指数导入 RSA 公钥,以便与 Windows CAPI 的 CryptVerifySignature 一起使用?
在 C# 中,我可以通过以下任一方式针对公钥验证哈希:
我需要知道的是,在给定入站 RSA 公钥的情况下,我如何使用 CAPI 来完成同样的事情?
我拥有验证哈希所需的大部分 CAPI 函数,除了了解如何将公钥导入加密提供者的上下文:
谢谢!
encryption - 创建加密 API 密钥的最佳方法
我的应用程序中有一个开放 API,我想为其提供访问密钥。传入的信息将是用户 ID、资源 ID 和要更新的值。我想要每个资源一个 API 密钥。
最好我希望能够仅使用提供的数据验证传入请求的真实性,而不是检查任何类型的数据库(非常简单,非常快!)
如果我使用 md5 从资源 ID、用户 ID 和盐生成 API 密钥,它可能看起来像这样......
我的问题实际上是关于我应该有多偏执的问题。像上面那样只用普通的旧 md5 就足够了吗?另一种选择是使用 openssl 生成针对 pem 的密钥,然后使用 md5 生成结果以保持简洁,这听起来是否过于偏执,甚至在现实中增加了一层安全性?
任何想法甚至替代品都非常感谢!
谢谢
winapi - 验证可执行文件的 Authenticode 签名时发生内存泄漏?
我正在使用WinVerifyTrust使用以下函数验证某些 Windows 可执行文件的有效性,该函数在循环中调用_tmain
:
然而,随着每个循环,内存不断增长,这是内存泄漏的明确迹象。
我对 的理解有问题API
还是WinVerifyTrust
函数实际上泄漏了?我正在Windows XP Professional SP3
系统上对此进行测试。
编辑:
以下是一些输出umdh
:
在我看来,CRYPT32
功能是泄漏的......或者我错过了一些东西。
编辑2
这是几千个循环的内存演变:
cryptography - Windows CryptoAPI:带有 CALG_SHA_256 的 CryptSignHash 和来自 MY 密钥库的私钥
我正在尝试使用与以下 openssl 命令兼容的 CryptoAPI 在 Windows(来自 XP SP3,但目前正在使用 Windows 7 测试)上生成数字签名:
我想使用 Windows“MY”密钥库中的私钥进行签名。
我设法通过使用以下 CryptoAPI 函数(为简洁起见省略参数)使用 SHA1 摘要算法对文件进行签名:
生成的签名与“openssl dgst -sha1 -verify”兼容(一旦字节顺序颠倒)。
我的问题是:当我尝试将 CALG_SHA_256 与 CryptCreateHash 一起使用时,它失败并出现错误 80090008 (NTE_BAD_ALGID)。通过谷歌搜索,我发现我需要使用特定的提供程序 (PROV_RSA_AES) 而不是默认的提供程序。因为我有一个提供者句柄,所以我还需要用 CryptGetUserKey 替换 CryptAcquireCertificatePrivateKey。所以我修改了我的程序看起来像:
不幸的是,这没有按预期工作:CryptGetUserKey 失败并出现错误 8009000D (NTE_NO_KEY)。如果我删除 CryptGetUserKey 调用,程序会一直运行到 CryptSignHash,它会失败并出现错误 80090016 (NTE_BAD_KEYSET)。我知道密钥集确实存在并且工作正常,因为我能够使用它来签署 SHA1 摘要。
我尝试使用从 CertFindCertificateInStore 获得的证书上下文中的信息再次获取上下文:我能做的最好的事情就是成功调用 CryptGetUserKey,但 CryptSignHash 总是会失败并出现相同的错误。
我尝试使用的私钥是 2048 位长,但我不认为它会成为问题,因为它适用于 SHA1 摘要。我很茫然,所以任何建议都会非常受欢迎!
.net - .Net RNGCryptoServiceProvider 类与 Win32 CryptGenRandom() 函数
我有一个用.Net 编写的新应用程序。我还有一个必须维护的应用程序的旧版本(同时),它是用 VB6 编写的并利用 C++ DLL。某些 C++ 本地 DLL 必须继续由新的 .Net 应用程序通过 P/Invoke 使用和共享。
旧版应用程序当前使用随机数生成器,它将被替换为使用通过 Win32 API 提供的 CryptGenRandom() 函数。新的 .Net 应用程序具有相同的需求,并且可以利用 RNGCryptoServiceProvider 类。
问题: .Net RNGCryptoServiceProvider 类在底层使用 Win32 CryptGenRandom() 函数吗?如果是这样,我会对与此相关的可用文档的任何链接感兴趣。