引发adwapi.dll-cryptDecrypt和cryptEncrypt函数,奇怪的问题
我正在观察此功能的Wierd行为,我要加密的字符串包含14个字符,如果我使用该函数发送buffer = 14的lenght,它会失败("内部错误" - 非常描述性,最有用错误代码),但是当缓冲区长度(和缓冲区本身)为128字节时,它起作用. i通过制作一个尺寸128字节数组来克服了这个问题,然后我从纯文本中复制了14个字节(我希望加密), 当我解密这些字节时,我必须再次将函数赋予整个128个字节阵列(现在,每个字节已加密,甚至是#13-#127(我猜是可以预期的)).幸运的是,对我来说,前14个字节被解密了,其余的都是gibberish. 我想知道,如果传入的缓冲区不是128个字节,为什么加密方法会失败,为什么解密功能还需要128个字节阵列,是否有些填充? 这就是我称为加密函数的方式: System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding(); // encoding type
12 2024-04-26
编程技术问答社区
用C#制作的数字签名在C++中无法验证
我有一个C#应用程序,该应用程序使用RSA数字签名数据.代码如下: RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); rsa.ImportCspBlob(privateKeyBlob); SHA1 sha1 = new SHA1CryptoServiceProvider(); sha1.ComputeHash(myData); byte[] signature = rsa.SignHash(sha1.Hash, CryptoConfig.MapNameToOID("SHA1")); 我无法验证C ++中的签名.代码如下: HCRYPTPROV cryptProvider; CryptAcquireContext(&cryptProvider, 0, 0, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT); // PROV_RSA_SIG does not work HC
12 2024-04-22
编程技术问答社区
C#中的ECDSA签名 在C中验证
我正在尝试使用ECDSA算法(此部分看起来还可以)在C#中签名,并使用Windows Crypto API在C中验证签名. 签名零件: CngKeyCreationParameters keyCreationParameters = new CngKeyCreationParameters(); keyCreationParameters.ExportPolicy = CngExportPolicies.AllowPlaintextExport; keyCreationParameters.KeyUsage = CngKeyUsages.Signing; CngKey key = CngKey.Create(CngAlgorithm.ECDsaP256, null, keyCreationParameters); ECDsaCng dsa = new ECDsaCng(key); //dsa = Digital Signature Algorithm byte[] pri
10 2024-04-08
编程技术问答社区
winhttp:如何使用临时证书商店?
我有一个C ++应用程序,该应用程序与我们的一台服务器建立了HTTPS连接. 在我理想的世界中,我希望以下情况发生: 应用启动 应用程序使Windows信任服务器的root CA(请不要GUI,只需系统调用) 应用与服务器交谈,工作等等. 应用程序使Windows忘记了服务器的根CA 完成 i DO 不是希望此根CA必须被其他应用所信任.因此,我不想在整个系统范围内安装. 如果用户不需要管理员特权,我也会喜欢它. 我的最初计划是创建一个内存中(cert_store_prov_memory)商店,将我的证书添加到其中,然后使用certAddStoreTocollection将其添加到系统商店中. 虽然所有加密函数呼叫成功,但Winhttp不喜欢它. 这是我在做什么的骨架 - 也许有人知道一个技巧? 也许这首先是错误的? hMemStore = CertOpenStore(CERT_STORE_PROV_MEMORY, ...); pCert =
14 2024-04-08
编程技术问答社区
Windows C/C ++加密API示例和提示
我问这个问题是因为我花了一天的时间在MSDN文档和其他不透明的来源拖网,以获取有关如何开始使用Windows C/C ++ Crypto API的简单直接准则. 我想看到的是一些示例代码,典型的包括路径,链接指南等.我知道这是一个不精确的问题,但我认为不精确的答案更好. 我会以自己的微薄发现让球滚动... 解决方案 这是我发现的一堆示例.... msdn有这些示例散布在这个很好地概述了这些概念以及跨平台示例 其他解决方案 MSDN文档在这里: http://msdn.microsoft US/Library/aa380252.aspx 这是主要文件:#include 加密位作为 Windows SDK ,通常安装在(例如,C:\Program Files\Microsoft SDKs\Windows\v6.0A).标题通常在%WINDOWSSDK%\Include中,相关库在%WINDOWSSDK%\Lib中.
22 2024-04-06
编程技术问答社区
如何在Java中使用BouncyCastle对DH参数进行正确编码?
我正在尝试重现" openssl dhparam -out dh1024.pem 1024"命令的输出.代码片段如下: - DHParametersGenerator generator = new DHParametersGenerator(); generator.init(1024, 0, new SecureRandom()); DHParameters params = generator.generateParameters(); // Generator G is set as random in params, but it has to be 2 to conform to openssl DHParameters realParams = new DHParameters(params.getP(), BigInteger.valueOf(2)
12 2024-04-03
编程技术问答社区
我们能否使用CNG(Windows Cryptography API)生成BCrypt / SCrypt / Argon2的哈希密码?
CNG(Windows加密API:下一代)是否可以生成bcrypt/scrypt/argon2 hash密码? bcrypt是一种旨在存储的计算困难算法 通过单向哈希功能的密码.您输入您的 算法的密码和重大(相对)之后 计算,产生输出.自从BCrypt一直存在于 90年代后期,并通过信息进行了重大审查 安全/加密社区.它已证明可靠和安全 随着时间的流逝. scrypt是对bcrypt出现的同一模型的更新. Scrypt 设计以依靠高内存要求而不是 对计算能力的高要求.意识到导致 这是专门的计算机芯片(FPGA/ASICS/GPU)可能是 攻击者大规模购买比大量的攻击者更容易 传统计算机的内存. 解决方案 简短答案 no. 长答案 cryptoapi也不是crypto api下一代(cryptng)支持bcrypt,scrypt或argon2 bcrypt是 Blowfish 加密算法的定制版本. CNG不支持洪水.即使是,bcrypt也使用bc
12 2024-03-29
编程技术问答社区
微软RSA CSP密钥大小
从我所看到的,Microsoft的RSA CSP总是生成相同的位长pseudo Prime数字.因此,如果密钥大小为1024,则P和Q值似乎是(?)保证为512位?有人知道这是否是这种情况吗? 我正在自己的RSA实现和微软的互操作性模块建立一个互操作性模块.就我而言,我已经在P&Q值之间构建了一个小的随机差异,因此对于1024位键,我最终可能会以506位,另一个值为518.在纯粹的实验基础上,如果我将差异锁定为0(即. P&Q值的尺寸相等) - 事物按照应有的方式工作,我很快就会在导入过程中以"不良数据"响应Microsoft RSA对象. 我正在寻找一个确认Microsoft可以强制执行相同的密钥尺寸的确认,因此,如果有人有任何信息,请发布 有人有机会问为什么我必须实现自己的RSA提供商:Cryptoapi在多线程环境中播放不错,它将在CryptoServiceProvider呼叫上锁定机器密钥库;如果从多个线程访问 对于那些关心的人,请在此处查看: http:
6 2024-03-10
编程技术问答社区
如何使用cryptoAPI进行AES CBC加密
我想使用cryptoAPI函数加密加密AES CBC mode加密,然后从命令行设置自己的密钥(我在代码中的更改) 我认为键(更改后)将为1a1dc91c907325c6,并以这种形式尝试: HCRYPTPROV hProv = NULL; HCRYPTKEY hKey = NULL; DWORD dwBlobLen; PBYTE pbKeyBlob = NULL; pbKeyBlob = (PBYTE)"1a1dc91c907325c6"; if(!CryptAcquireContext(&hProv, NULL,NULL, PROV_RSA_AES,CRYPT_VERIFYCONTEXT)) { printf(" Error in AcquireContext 0x%08x \n",GetLastError()); } if (!CryptImportKey(hProv,pbKeyBlob,sizeof(pbKeyBlob),0,CRYPT_EX
28 2024-01-19
编程技术问答社区
CryptoAPI C++互操作与使用AES的Java
我试图使用cryptoapi和使用sunjce加密和解密Java在C ++中进行加密.我已经获得了RSA键的工作 - 并在测试字符串上进行了验证.但是,我的AES密钥无法正常工作 - 我得到javax.crypto.BadPaddingException: Given final block not properly padded. C ++加密: // init and gen key HCRYPTPROV provider; CryptAcquireContext(&provider, NULL, MS_ENH_RSA_AES_PROV, PROV_RSA_AES, CRYPT_VERIFYCONTEXT); // Use symmetric key encryption HCRYPTKEY sessionKey; DWORD exportKeyLen; CryptGenKey(provider, CALG_AES_128, CRYPT_EXPORTABLE, &ses
14 2024-01-19
编程技术问答社区
如何使用CryptoAPI导出AES密钥
我想将Windows CryptoApi函数用于AES加密. 如您所知,API具有许多函数创建,哈希和更改输入的密钥;它得出了钥匙,您可以将其处理. 我的问题是我想知道什么是派生的密钥? #include #include int main() { HCRYPTPROV hProv = 0; HCRYPTKEY hKey = 0; HCRYPTHASH hHash = 0; DWORD dwCount = 5; BYTE rgData[512] = {0x01, 0x02, 0x03, 0x04, 0x05}; LPWSTR wszPassword = L"pass"; DWORD cbPassword = (wcslen(wszPassword)+1)*sizeof(WCHAR); if(!CryptAcquireContext( &hPr
98 2024-01-19
编程技术问答社区
如何在C#中从一个.Net DLL中提取公钥?
我想从autenticode签名的.NET DLL中提取公共密钥,而不是公共密钥令牌? 解决方案 要从Autenticode签名的.NET库中获取公共密钥,请使用以下代码: Assembly assembly = Assembly.LoadFrom("dll_file_name"); X509Certificate certificate = assembly.ManifestModule.GetSignerCertificate(); byte[] publicKey = certificate.GetPublicKey(); ,只有将证书安装到可信赖的根认证机构中时,这才能起作用.否则,GetSignerCertificate()返回null. 第二种方法允许获得证书,即使不在可信的根认证机构中. X509Certificate executingCert = X509Certificate.CreateFromSignedFile("dll_file
16 2024-01-07
编程技术问答社区
将从 .NET 导出的 CSP blob 导入 python pyCrypto
我使用 RSACryptoServiceProvider.ExportCspBlob 在我的.NET应用程序中. return Convert.ToBase64String(rsaAlg.ExportCspBlob(false /*includePrivateParameters*/)); 现在,我需要在Python应用程序中导入该斑点.我尝试使用pycrypto,但没有运气. # that's the value I'm getting from .NET code above key = 'BgIAAAAkAABSU0ExAAgAAAEAAQARMnLlzOgHkmHssf6ZSFJn8TlTiOBSoRSEnkI4U0UI6n1jFY2bTWS9O5uApMNXz1vr5OyxoXsNVF2XrNM4DOC+lRn3R/H+mZZxZY1F8oXxhe4L5AFOMhyykPreQtu9z+oKOzVB80zR+EU+nc/290POVK9/LGzP94cTk0VH
16 2024-01-06
编程技术问答社区
用System.Security.Cryptography将Win32 Crypto API调用翻译成C#。
我被赋予了一个分配,以删除我们的产品之一的DLL,并用纯C#替换它.旧的DLL是.NET 2.0托管的C ++(C ++ \ CLI),它包装到Win32 Native Crypto API.新的DLL应以相同的名称和方法公开一个新对象,但应使用C#(.NET 4.0)编写.当然,新的DLL应与旧的dll相同的方式(和解密) - 否则,所有保存的加密密码(如db或文件中)将无法解决!. 无法解决! 这是本机(win32)api调用的(伪)代码(注意输入是Elway Unicode编码): //buffer_to_encrypt - Is the input to the following procedure and is the buffer // to be encrypted using 3DES and the below password to generate a valid 3DES key // The buffer is Unicode encoded!!!
16 2024-01-05
编程技术问答社区
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-都可以 - 都可以). . 但
16 2024-01-03
编程技术问答社区
生成CrypoAPI(CAPI)私钥
我正在尝试使用 ixmlencryptor .专门使用证书保密. (这是用于共享解密cookies键的IXMLRepository系统的一部分,并将一般密钥管理在asp.net core中.) 这个文档页面为此,使用X.509证书讨论. 这表明"仅支持 CAPI私钥的证书". 谷歌搜索表明CAPI表示Microsoft Cryptapi.但是我找不到更多关于它的信息,我能找到的似乎与C ++有关. 我的"证书家伙"基本上告诉我,当我问他是什么" capi私钥"是: Microsoft生成的PFX文件转换为X509具有密码.那将是我唯一能想到的. 那是同一件事吗? 如果不是, X.509如何使用CAPI私钥? 注意:X.509证书是 docs page 它将在Linux机器(容器)上使用.这就是为什么我不查看其他任何(可能更容易)选项的原因. 解决方案 您的"证书家伙"不正确. Microsoft有两个版本的密码susbsyte
14 2023-12-15
编程技术问答社区
如何将Windows根证书自动导出到文件?
在Windows计算机上,我想创建一个将Windows根证书导出到.pem \ .crt文件的C ++代码(就像certmgr.msc工具一样,我可以手动进行操作). 目前正在Windows的Cryptoapi文档中挖掘,但没有找到任何东西. 编辑: 在使用下方的Soltuion之后,PEM证书的创建以下格式(末尾之间的不必要的新线和额外的字符之间的新线):-----开始证书------ miicvdccaiuceeoz0jimglkcpv1zxxvd3kmwdqyjkozozihvcnaqeebqawgz4xhzad bgnvbabbaotflzlcmltawduifrydxn0ie5ldhdvcmsxfzavbgnvbastdlzlzlcmltawdu .... rj1qnaufcfb2jip/f87ly795aqdzlrcvkir17aqp0l3ncsoqcy/os68olsr5kyss 3P+6Z0JIPPAQ5L9H+JXT5ZPRCZ/4/
4 2023-12-15
编程技术问答社区
MS Crypto API在Windows XP与Vista/7上的行为
我试图了解如何从XP,Vista和Windows 7中获取从PEM格式导入的公钥,但不一样. 在Windows XP上,String "(Prototype)" 在加密提供商的名称中需要,并允许呼叫CryptimportPublicKeyInfo通过. 在Windows 7上,"(Prototype)" 显然存在,但不支持对CryptimportPublicKeyinfo的呼吁,这令人困惑. 这些操作系统之间的正确实现会是什么样?是否有必要检测XP并用"(Prototype)" 请求名称,而没有其他操作系统?是否可能在某些XP系统上失败? 或,是否有一种方法可以检测这种令人困惑的行为并选择任何加密提供商都会支持必要的呼叫? 在Windows 7上输出: ANALYZING CRYPTOGRAPHIC SUPPORT FOR: "Microsoft Enhanced RSA and AES Cryptographic Provider"
10 2023-12-09
编程技术问答社区
Windows Phone 8和Windows Store 8的随机数字?
我在Windows Phone 8和Windows Store 8平台上的几个安全库中苦苦挣扎.我需要一个提供随机数的函数. win32具有CryptGenRandom甚至RtlGenRandom. Windows Store 10和Universal Windows具有BCryptGenRandom.但是,Windows Phone 8和Windows Store 8有一个漏洞,因为Cryptoapi是 可用的,并且CNG仅在Windows 10和Universal Windows上可用. MSDN文档说BCryptGenRandom可用于" Windows Store",但他们不说Windows Store 10和UWP(感谢CW ). 库是不受管理的C/C ++.它们用标准/便携式C和C ++编写.有时,他们必须像收集随机数一样使用特定于操作系统的API.他们不反对托管API,也不会链接到托管库. Windows Phone 8和Windows Store 8?
18 2023-12-09
编程技术问答社区
C++访问受信任的根证书
我已经与OpenSSL创建了一个公共/私钥对,并将其转换为使用OpenSSL的*.pfx文件.然后,我将此文件导入到Windows Trusted Certificate Store. 中 我现在想通过C ++代码从此证书访问私钥. 这可能吗?如果是,您可以将我指向一个方向吗?我还没有找到任何合适的东西. 解决方案 是的,可以访问私钥. 返回
18 2023-12-07
编程技术问答社区