如何在C#中通过指纹查找证书

RAT*_*THI 78 c# x509certificate

我正在使用此代码通过其指纹查找证书.证书存在于个人证书存储区中,但此代码未找到该证书.

请告诉我我在哪里做错了.

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string certThumbPrint = "??fe14593dd66b2406c5269d742d04b6e1ab03adb1";
            X509Store certStore = new X509Store(StoreName.My, StoreLocation.CurrentUser);
            // Try to open the store.

            certStore.Open(OpenFlags.ReadOnly);
            // Find the certificate that matches the thumbprint.
            X509Certificate2Collection certCollection = certStore.Certificates.Find(
                X509FindType.FindByThumbprint, certThumbPrint, false);
            certStore.Close();

            // Check to see if our certificate was added to the collection. If no, 
            // throw an error, if yes, create a certificate using it.
            if (0 == certCollection.Count)
            {
                Console.WriteLine("Error: No certificate found containing thumbprint " );
            }
            Console.ReadLine();
}
Run Code Online (Sandbox Code Playgroud)

Ken*_*enD 201

在谷歌搜索同一个问题时偶然发现了这个问题,并在这里找到了答案:如果像我一样,你通过突出显示指纹并将其复制到剪贴板从MMC获得了你的"源"指纹,你几乎肯定会抓到一个屏幕开头的隐形字符,所以:

string certThumbPrint ="fe14593dd66b2406c5269d742d04b6e1ab03adb1";

实际上是

串certThumbPrint = " INVISIBLECHARACTER fe14593dd66b2406c5269d742d04b6e1ab03adb1";

如果你删除这个不可见的字符(当你按下退格键或在它旁边删除时你可以告诉它,似乎没有发生任何事情),或者只是手动重新键入指纹,你的代码应该可以正常工作.现在,如果只有Visual Studio有一个"显示隐形字符"选项...

  • 哇...我刚刚失去了四个小时......很棒的发现! (23认同)
  • 我现在可以亲切地吻你!如果只有你可以赞成217次...... (3认同)
  • HOLY @%$ @ $ !!! 这是史诗.浪费小时,玩即时窗口,想知道为什么"Foo"=="Foo"是假的.你,先生,值得一个赞成.谢谢! (3认同)
  • 投票选出最佳看似无关但绝对正确的答案,解决2013年至今不存在的问题.:) (3认同)
  • VS 具有“编辑”>“高级”>“查看空白”(Ctrl+R、Ctrl+W 进行切换)- 如果您知道要查找的内容,它**可能** 有帮助。 (2认同)
  • 这解释了?我在日志中看到的字符!上帝保佑你先生 (2认同)

Edw*_*rey 17

包含指纹的字符串文字在开头有一个从左到右的标记.当MMC列出证书属性时,它会在指纹值前面加上此字符,这样即使在文本通常从右向左呈现的区域设置中,也会从左到右列出十六进制字节.

可能,这是某人所采用的捷径,因为更容易将字符添加到属性列表中的某个值,而不是编写一些代码来动态更新编辑控件的样式.也许这是在本地化测试期间快速修复错误报告.

在MMC中,从左到右的标记具有非零宽度,您可以通过观察光标在箭头上移动时观察到,并且我注意到第一行十六进制字节与右侧相比略微向右移动第二排.

在其他编辑器(如Visual Studio)中,从左到右的标记没有宽度,但您仍然可以通过注意箭头移动时光标不移动来观察它.正如肯德回答的那样,删除这个角色可以解决问题.

快速识别隐形字符的方法:使用键盘选择不可见字符; 然后将它粘贴到一些普通字符之间的Word中.在Word中选择它; 然后单击插入>符号>更多符号.查看"Unicode名称"下的左下角.


dro*_*ter 10

确保从指纹字符串中删除那些LTR"\ u200e"和RTL"\ u200f"字符执行以下操作

thumbprint = thumbprint.Replace("\u200e", string.Empty).Replace("\u200f", string.Empty).Replace(" ",string.Empty);
Run Code Online (Sandbox Code Playgroud)

删除空格的最后一个字符串替换是完全必要的,因为它找到我的证书有或没有它们.

其他麻烦的unicode角色可以在这里找到

UTF-8编码表和Unicode字符


小智 5

我的两分钱:我在MMC中复制了值并将其粘贴到启用了空白的VS中。

开头没有什么,但结尾没有空格:“ 1e 52 73 0d 00 29 e6 85 7b e6 23 e2 fa c7 a5 08 ac 36 5e 57”

现在,在web.config文件中,我粘贴了保留所有内部空间的值,并删除了最后的空间:“ 1e 52 73 0d 00 29 e6 85 7b e6 23 e2 fa c7 a5 08 ac 36 5e 57”

这很好。

如果我使用“ 1e52730d0029e6857be623e2fac7a508ac365e57”,则删除其他帖子中看到的内部空间是行不通的...

希望这可以帮助;)