将Windows RC4 CryptDeriveKey翻译成PHP,用于openssl
这是我们一直在尝试执行的传统系统翻译的第二个组成部分.我们设法匹配了Windows :: Crypthashdata生成的初始二进制密码/键. 该密码/键将传递到:: CryptderiveKey执行许多步骤,以创建:: CryptenCrypt使用的最终键.我的研究使我进入了CryptderiveKey文档,它清楚地描述了:: CryptenCrypt的钥匙所需的步骤,但是到目前为止,我还无法将其解密PHP侧的文件. https:/en-us/windows/desktop/api/wincrypt/nf-wincrypt-cryptderivekey 基于:: CryptderViveKey文档,我们特定的遗产密钥大小可能还会有一些其他无证件步骤,这些步骤可能无法很好地理解.当前的Windows :: CryptderiveKey默认情况下是为零的盐,这显然与NO_SALT不同.在此处查看盐值功能: US/Windows/desktop/scrypto/salt-valu
0 2023-05-31
编程技术问答社区
将windows商店中的私钥转换为PEM(用于OpenSSL)。
我想从Windows Store获取一个私钥,然后将其转换为PEM,以便在OpenSSL中使用它. 我一直在寻找几个小时的方法! 我使用certfindcertificateinstore()获取cert_context(我知道它包含使用搜索参数的私钥). 接下来,我使用cryptacquirecertificateprivatekey()获取hcryptprov(仅是因为函数的名称). 现在,我使用cryptgetuserkey()获取hcryptkey(只是因为听起来正确...?!) ,但现在我又被卡住了. 我认为这是Microsoft默默无闻的安全性,以确保我们永远无法获得私钥. 解决方案 前两个很好.但是您需要使用但是,如果将私钥标记为不可泄漏,则此功能将失败. 只能使用您可以使用此类私钥签名. 其他解决方案 我要留下答案(毕竟没有dbasic,我会被卡住了:-)),但是我还有更多要添加: cryptexportpkcs8()支持
2 2023-05-11
编程技术问答社区
MS CryptoAPI-Machine Keystore与certreq创建的密钥发生错误0x80090016(NTE_BAD_KEYSET)。
摘要 我使用 real="nnofollow">创建PKCS#10 CSR certreq 并设置了选项Exportable=TRUE.这成功创建了位置REQUEST的键.我也有一个有效的证书,其中包含MY中的密钥.如果我尝试访问其中任何一个,则Cryptoapi报告错误代码0x80090016. 在不同的访问权限下运行无法解决此问题. 目标 我的目标是在MY和REQUEST中获得两个键.如果我在任何一个上都拨打CryptAcquireContextA(),它将失败. 系统 Windows 7 x64 示例源代码 我的完整代码看起来像这样: hStore = CertOpenStore(CERT_STORE_PROV_SYSTEM_A, 0, 0, CERT_SYSTEM_STORE_LOCAL_MACHINE, "REQUEST"); pCert = CertFindCertificateInStore(hStore, X509_A
0 2023-05-11
编程技术问答社区
RSA_public_decrypt和MS Crypto API等同
我正在尝试开发许可证验证解决方案.使用OpenSSL的RSA_private_encrypt函数在服务器上编码许可证. 对于mac ox x i使用RSA_public_decrypt,它就像魅力一样.在Windows上,我必须使用很小的代码,因此我无法与OpenSSL或其他LIB链接,我必须使用MS Crypto API. 我花了几天时间试图弄清楚什么问题,但没有运气.我可以成功地导入公共密钥,但是在这里我的成功结束了. 我知道我需要用CAPI扭转字节订单,因此这可能不是问题. 我已经尝试了所有内容,包括CryptVerifyMessageSignatureWithKey和CryptDecodeObject将斑点加载不同的参数,但仍然没有运气. 它总是以GetLastError() == CRYPT_E_ASN1_BADTAG结尾,我认为这意味着blob不是asn1的格式化... google在rsa_private_encrypt的输出格式上没有告诉任何内容.
8 2023-05-11
编程技术问答社区
OpenSSL和MS CryptoAPI:不同的数字签名
我使用makecert实用程序生成了X509证书 makecert -n "CN=RootCATest" -r -sv RootCATest.pvk RootCATest.cer makecert -sk MyKeyName -iv RootCATest.pvk -n "CN=tempCert" -ic RootCATest.cer -sr currentuser -ss my -sky signature —pe 然后,我将rootcatest.pvk转换为使用openssl的rootcatest.pem.我提取了公钥:pubrootcatest.pem 我的小文件称为" msg". 我使用sha1签名. openssl dgst -sha1 -sign c:\RootCATest.pem -out c:\openssl c:\msg 然后,我想使用MS CryptoApi获得相同的数字签名. 这是我的代码(注意:这是理解概念的代码,因此我没有免费分
14 2023-05-11
编程技术问答社区
CryptoAPI。使用CryptVerifySignature来验证来自openssl的带有公钥的签名
我正在尝试移植 aquaticprime Mac的框架到Windows. 在Mac上,它使用OpenSll库,我尝试了解如何将其移植到Windows,我猜我必须使用加密 我主要需要用给定的公钥验证生成的签名的代码. 这是使用OpenSSL进行验证: 输入:许可证数据,公共密钥和签名,两种字节长. 根据许可证数据计算出SHA1摘要. 使用公共密钥数据设置了RSA上下文 rsa_public_decrypt()被称为RSA键和签名(返回20个字节长SHA1摘要)的签名是此摘要等于第2步中的一个,签名是有效的. . 那么,我该如何使用加密蛋白?我走了这么远: 从cryptacquirecontext(ctx,0,0,prov_rsa_full,crypt_verifyContext) 在 this 发布,pubexp = 3且bitlen = 1024.一切都起作用,即我没有错误,我查看了二进制数据,以验证它与MSDN文章显示的内容相匹配. 从许可证
2 2023-05-11
编程技术问答社区
使用CryptoAPI的MD5-SHA1哈希值
我需要使用MD5-SHA1 Hash签署数据(MD5 Hash和Sha1 Hash合并然后签名). 主要要求: md5-sha1哈希以某种未暴露的方式提供了OpenSSL.这个哈希已经完成. 现在,我的要求是使用加密API签署此哈希,而无需哈希(仅需要签名,而不是再次哈希).为什么不是cryptoapi,而不是openssl?因为,我正在处理带有不可验证的私钥的证书.它的私钥只能由Cryptoapi使用,而不是OpenSSL. 此方案来自SSL握手,其中将客户端验证零件(在不可泄露的私钥的情况下)发送到我的一层,并试图使用cryptoapi签署数据. 另外,我想知道使用OpenSSL使用不可验证的私钥证书的其他方法. 解决方案 通过在CryptCreatehash中使用calg_ssl3_shamd5,然后打电话给CryptSethashashparam,然后打电话给CryptSignHash为我完成了工作. 让我详细说明要求: 1.通常,我使
0 2023-05-11
编程技术问答社区
如何在Java中生成与Python示例等效的HMAC?
我正在考虑实施一个应用程序,获取 twitter通过oauth 在Java中.第一步是获取请求令牌.这是 python示例 App Engine for App Engine. 要测试我的代码,我正在运行Python并使用Java检查输出.这是Python生成基于哈希的消息身份验证代码(HMAC)的示例: #!/usr/bin/python from hashlib import sha1 from hmac import new as hmac key = "qnscAdgRlkIhAUPY44oiexBKtQbGY0orf7OV1I50" message = "foo" print "%s" % hmac(key, message, sha1).digest().encode('base64')[:-1] 输出: $ ./foo.py +3h2gpjf4xcynjCGU5lbdMBwGOc= 一个人如何在Java中复制此示例? 我已经看过一个/p
0 2023-05-02
编程技术问答社区
Nodejs AES-256-GCM通过webcrypto api解密加密的客户端信息
我已经通过AES-256-GCM算法在客户端中的键加密文本,我可以在客户端中解密它,但是当我将其发送到具有SharedKey的后端时(与客户端具有的相同),它可以通过AES-256-CTR算法解密该消息(我使用了此算法,因为Nodejs中的AES-256-GCM Suppity authTag我不在客户端中创建它,而iv是我唯一的一件事有). 当我在后端侧解密消息时,它没有错误,但结果不是我在客户端中加密的内容 这是我写的: 客户: async function encrypt(text: string) { const encodedText = new TextEncoder().encode(text); const aesKey = await generateAesKey(); const iv = window.crypto.getRandomValues( new Uint8Array(SERVER_ENCRYPTIO
4 2023-04-26
编程技术问答社区
在C++中通过cryptoapi加密一个大文件
我正在使用CryptoApi来加密文件(非对称加密).每个人都可以,但是当文件很大时,它就无法对其进行加密.我搜索并发现必须通过块加密块.除最后一个块外,CryptEncrypt函数中的Final标志必须为fals. 我知道上述所有概念,但我不知道如何实施它们.我的意思是我不知道如何阅读,加密和写入块. 你能给我一个真实的代码示例吗? 更新: 我使用了此网站的代码: http://blogs.msdn.com/b/alejacma/aharchive/2008/01/28/how-to-to-gen-to-gen-generate-kenerate-key- key--key-pairs---------------- gent-and-decrypt-data-with-with-cryptoapi.aspx 解决方案 我正在为将来会有这个问题的程序员编写此解决方案: 在此链接中已显示如何加密大文件(block): 注意:当您要使用上述代码 时,
32 2023-04-19
编程技术问答社区
为什么MS CryptoAPI的CryptDecrpyt()在远程系统上不能正确解密前16字节?
我试图提出如何使用MS Cryptoapi创建会话密钥并转移到遥控器中,以便他们可以通过私人网络加密数据(因此不必担心中间的人,只需数据包sniffer) .还需要支持Windows XP.我想我已经弄清楚了其中的大部分,并建立了一堂课来完成我需要的事情.但是,当我将2604字节加密到密文的2608时,然后在同一机器("机器a")上解密它,该计算机("机器a")导入了会话密钥,它可以正常工作,但是在另一台计算机上(实际上创建了会话键的一台计算机) ,"机器B")解密数据不能正确解密前16个字节(第一个块). 我要做的是让机器A将公共密钥发送到机器B,机器B创建一个随机会话密钥,然后将其导出并将其发送到机器A,Machine A导入该键. Machine A Machine B ------------------------------------------ -----------------------
20 2023-04-12
编程技术问答社区
傻瓜式的Cryptoapi
我可以向我提供一些书籍或在线资源来帮助了解Windows Cryptoapi软件包吗?我确实找到了理查德·邦迪(Richard Bondi)的"视觉基础密码学".我对针对C ++或一般包装的东西更感兴趣. MDSN压倒性! 解决方案 这是一个简单的教程,可以将您指向正确的方向.我希望它有帮助. 其他解决方案 MSDN可能会压倒性,但是有一些光线.此页面将为您提供一些上下文: http://msdn.microsoft.com/en-en-us/library/library/library/library/mms867086.aspx 无论如何,这实际上取决于您打算做什么.如果您只是使用Cryptoapi执行加密操作,那么您可以使用MSDN或只是寻找WinCrypt.h(该标题内部有很多信息). 但是,如果您要使用或不使用硬件开发自己的CSP(加密服务提供商),则需要更多信息. 如果您给我更多的详细信息,我可以将您指向适当的地方(我在两次之前都做过).
18 2023-04-12
编程技术问答社区
TLS 1.2-提供给函数的令牌是无效的
我有一个奇怪的问题,sslstream.authenticateasclient()抛出以下例外: System.Security.Authentication.AuthenticationException : A call to SSPI failed, see inner exception. ----> System.ComponentModel.Win32Exception : The token supplied to the function is invalid 仅在客户端要求TLS12时才发生: SslStream.AuthenticateAsClient(..., ..., SslProtocols.Tls12); 代码适用于SSL3,TLS11和TLS. 服务器证书是自签名和"旧".它使用MD5RSA签名和1024位,而我认为这是问题所在,因为重新生成证书会使例外消失(我累了SHA1和SHA512-都可以 - 都可以). . 但
10 2023-04-12
编程技术问答社区
MD5 Crypto API对某些明文返回不正确的哈希值
我正在尝试使用Microsoft Crypto API来计算MD5哈希,但是我正在遇到不正确的哈希斯: #include #include #include char* HashMD5(char* data, DWORD *result) { DWORD dwStatus = 0; DWORD cbHash = 16; int i = 0; HCRYPTPROV cryptProv; HCRYPTHASH cryptHash; BYTE hash[16]; char *hex = "01234567879abcdef"; char *strHash = "00000000000000000000000000000000"; if(!CryptAcquireContext(&cryptProv, NULL, MS_DEF_PROV, PROV
0 2023-03-24
编程技术问答社区
如何通过CryptoAPI以Base64字符串的形式从Windows证书库导出证书
我已经遵循C#代码来完成我在主题中要求的事情: public static void ExportCertificatesToFile(string FileName) { stringBuilder builder = new StringBuilder(); X509Store storeMy = new X509Store(StoreName.My); storeMy.Open(OpenFlags.ReadOnly); foreach (X509Certificate2 cert in storeMy.Certificates) { builder.AppendLine("-----BEGIN CERTIFICATE-----"); builder.AppendLine(Convert.ToBase64String(cert.Export(X509ContentType.Cert),
14 2023-03-09
编程技术问答社区
生成CrypoAPI(CAPI)私钥
我正在尝试使用 ixmlencryptor .专门使用证书列表. (这是用于共享解密cookies键的IXMLRepository系统的一部分,并将一般密钥管理在asp.net core中.) this 文档页面为此目的,使用X.509证书讨论. 这表明"仅支持 CAPI私钥的证书". 谷歌搜索表明CAPI表示Microsoft Cryptapi.但是我找不到更多关于它的信息,我能找到的似乎与C ++有关. 我的"证书家伙"基本上告诉我,当我问他是什么" CAPI私钥"是: Microsoft生成的PFX文件转换为X509具有密码.那将是我唯一能想到的. 那是同一件事吗? 如果不是, X.509如何使用CAPI私钥? 注意:X.509证书是 docs page 它将在Linux机器(容器)上使用.这就是为什么我不查看其他任何(可能更容易)选项的原因. 解决方案 您的"证书家伙"不正确. Microsoft有两个版本的密码sus
10 2023-03-09
编程技术问答社区
C++访问受信任的根证书
我已经与OpenSSL创建了一个公共/私钥对,并将其转换为使用OpenSSL的*.pfx文件.然后,我将此文件导入到Windows Trusted Certificate Store. 中 我现在想通过C ++代码从此证书访问私钥. 这可能吗?如果是,您能把我指向一个方向吗?我还没有找到任何合适的东西. 解决方案 是的,可以访问私钥. >返回/a>从证书 获得私钥
26 2023-03-09
编程技术问答社区
CertCreateCertificateContext返回CRYPT_E_ASN1_BADTAG / 8009310b
I realize this is a very similar post to others (e.g. 这个),但是帖子中缺少一些细节,这可能对我的情况很重要. 首先,这是我的简化程序: #include "stdafx.h" #include #include int _tmain(int argc, _TCHAR* argv[]) { // usage: CertExtract certpath char keyFile[] = "C:\\Certificates\\public.crt"; BYTE lp[65536]; SECURITY_ATTRIBUTES sa; HANDLE hKeyFile; DWORD bytes; PCCERT_CONTEXT certContext; sa.nLength = sizeof(sa); s
52 2023-03-09
编程技术问答社区
提取证书中一个主题属性的所有值
我目前正在使用 CertGetNameString 提取每个主题属性的值,例如: CertGetNameString(pCertificate, CERT_NAME_ATTR_TYPE, 0, szOID_ORGANIZATIONAL_UNIT_NAME, buf, _countof(buf)); 但是,我发现的某些证书​​对组织单位名称(OU)和CertGetNameString有多个值,只能读取第一个.例如,这是Adobe证书的主题: CN = Adobe Systems, Incorporated OU = Acrobat Engineering OU = Digital ID Class 3 - Microsoft Software Validation v2 O = Adobe Sys
10 2023-03-09
编程技术问答社区
VS2010-CryptoAPI-v7.0A Vs v6.0A中的结构变化-WinCrypt.h
在C:\Program Files\Microsoft SDKs\Windows\v7.0A\Include\WinCrypt.h中,CERT_CHAIN_ENGINE_CONFIG的定义是 typedef struct _CERT_CHAIN_ENGINE_CONFIG { DWORD cbSize; HCERTSTORE hRestrictedRoot; HCERTSTORE hRestrictedTrust; HCERTSTORE hRestrictedOther; DWORD cAdditionalStore; HCERTSTORE* rghAdditionalStore; DWORD dwFlags; DWORD dwUrlRetrievalTimeout; // milliseconds DWORD MaximumCach
22 2023-03-09
编程技术问答社区