小编use*_*541的帖子

如何在C++中检索证书指纹

我正在开发一个C++应用程序,我需要检查证书的指纹.

我发现此解决方案使用CryptQueryObject()检查特定签名.但我仍然找不到检索Thumprint的方法.

在C#中,我可以使用方法GetCertHashString来获取哈希(这是我需要的)或使用属性X509Certificate.Thumbprint

我知道我需要获取公钥的哈希值,但我不知道如何检索公钥.

我怎么用C++做到这一点?有没有办法呢?

c++ certificate

4
推荐指数
1
解决办法
3848
查看次数

从程序数据到 AppData\Local\VirtualStore\ProgramData 的文件重定向

我在 .net 3.5 中使用 C#

我将我的程序数据保存在一个文件中:C:\Program Data\MyProgramName\fileName.xml

安装并运行我的应用程序一次后,我卸载了它(在卸载过程中我从“程序数据”中删除了所有文件),然后我重新安装了应用程序,并运行了它。

奇怪的是,我的应用程序启动时就好像程序数据中的文件存在一样 - 这意味着,即使数据文件被删除,我的应用程序中仍有旧数据。

运行时:

File.Exists("C:\Program Data\MyProgramName\fileName.xml")
Run Code Online (Sandbox Code Playgroud)

即使我确定该文件不存在,我也得到了“真实”。

当我以管理员身份运行应用程序然后文件不存在时,事情变得奇怪了。

经过研究,我发现在没有管理员权限的情况下运行我的应用程序而不是获取:“C:\Program Data\MyProgramName\fileName.xml”我得到“C:\Users\userName\AppData\Local\VirtualStore\ProgramData \MyProgramName\fileName.xml"

确实有一个文件存在于以前的安装中(我显然没有删除,因为我不知道它存在)。

所以很明显,程序数据下的文件有一些虚拟路径。

编辑 :

我发现在删除虚拟商店中的旧文件后,我的应用程序突然能够找到正确的文件。(我没有对 Program Data 下的文件进行任何更改。

我的问题是:

  1. 为什么会这样。
  2. 我怎样才能防止它发生

提前致谢

c# windows filesystems programdata

3
推荐指数
1
解决办法
8784
查看次数

如何仅从CRL检查撤销列表?

我正在使用WinVerifyTrust来验证文件签名.

与互联网的连接非常糟糕,所以我想只检查本地缓存.

问题是我对如何在WinTrustData中设置参数感到困惑

关于fdwRevocationChecks - 文档如下:

当WTD_REVOKE_NONE标志与WinVerifyTrust函数的pgActionID参数中设置的HTTPSPROV_ACTION值一起使用时,不会进行额外的吊销检查.要确保WinVerifyTrust函数在验证代码签名时不尝试任何网络检索,必须在dwProvFlags参数中设置WTD_CACHE_ONLY_URL_RETRIEVAL.

它是什么意思"没有额外的撤销检查" - 除了什么?它是否使用CRL进行撤销检查?如果我将此字段设置为*WTD_REVOKE_WHOLECHAIN*它也将在线检查吗?

如果我设置WTD_CACHE_ONLY_URL_RETRIEVAL就足够了,以确保它不会尝试从互联网上获取撤销列表?

底线:我如何确保 CRL检查,但没有任何在线检查.

谢谢

certificate-revocation winverifytrust

3
推荐指数
1
解决办法
1746
查看次数

在C#中提取.cab文件

我正在开发ac#应用程序,我需要提取一个cab文件.

我找不到在C#中执行此操作的库.由于许可问题,我无法使用Microsoft.Deployment.Compression.Cab.dll.

我找到了这个代码,但问题是,当我使用它时,我能够找到并提取机柜中的第一个文件.

仅当OutputFileOpen返回IntPtr.Zero时才调用OutputFileClose.但如果OutputFileClose是calles,则枚举将停止.因此,对于此代码,只能为一个文件调用OutputFileClose

有人可以帮我弄清楚如何编写一个可以提取所有文件的代码吗?

c# cab

2
推荐指数
1
解决办法
8509
查看次数

如何在 Protobuf 中声明 unsigned long long?

在 Protobuf 中声明 unsigned LongLong (unsigned __int64) 的正确方法是什么,以便它可用于 Android 和 Windows?

编辑: 我认为我可能需要使用变量,每个变量都包含一个 uint64,但我不确定这是否是正确的方法。

更新

我在protobuf文件中使用了uint64并编译它。cpp 文件中的结果是 unsigned __int64。我很困惑,因为在文档中他们说它映射到 long..

c++ protocol-buffers long-long

2
推荐指数
1
解决办法
2万
查看次数

将字符串的每次出现替换为迄今为止出现的次数

我有一个带有占位符的字符串,我想将索引附加到占位符上。

例如

'This @placeholder is @placeholder'
Run Code Online (Sandbox Code Playgroud)

应该成为

'This @param0 is @param1'
Run Code Online (Sandbox Code Playgroud)

假设我有一个包含 2 个值的参数列表(与 @placeholder 出现的次数匹配)。

一种可选的解决方案是。

result = ''
parts = my_text.split('@placeholder')
for i in range(0, len(params)):
  result += '{}@param{}'.format(parts[i], i)
return result
Run Code Online (Sandbox Code Playgroud)

另一种选择是继续用当前索引替换占位符,但这意味着扫描字符串 len(params) 次。

for i in range(0, len(params)):
  my_text = my_text.replace('@placeholder', '@param{}'.format(i), 1)
Run Code Online (Sandbox Code Playgroud)

在 python 中是否有更好的解决方案?

python regex string replace

2
推荐指数
1
解决办法
319
查看次数

禁用wow64重定向后,"无法找到指定的过程"

我在x64系统上运行32位应用程序.(Windows 7)我正在尝试运行Windows备份,它位于:c:\ System32\sdclt.exe.因为我作为32位进程运行,所以我必须禁用WOW64重定向(使用Wow64DisableWow64FsRedirection).问题是,在禁用wow64重定向后,我得到"无法找到指定的过程"错误.

我的猜测是,不知何故,当禁用重定向时,sdclt.exe无法加载其所有依赖的dll.

注意:1.只有在我没有使用高级特权的情况下才会发生这种情况.2.我将"使用shell执行"设置为true,因为我想让用户使用我的应用程序而没有提升权限.2.编译为64位时不会发生此错误.

.net windows winapi

1
推荐指数
1
解决办法
1719
查看次数