为什么在 C# 中使用 PKCS7 和 X509Certificate 打开数字签名的 pdf 文档时出现错误?

2024-02-22

我正在尝试使用签名 pdf 文件PKCS7 and X509Certificate但是当我在 Adob​​e 中打开签名的 pdf 文件时出现以下错误。

文件自签署以来已被更改或损坏

文档哈希

66305799d97adc716694faa3aecb3b82136a76a57e0470fb289dcf727b83304b

以下是我的代码:

public class Helper
{

    private static PdfPKCS7 _signature;
    private static PdfSignatureAppearance _apperance;
    private static byte[] _hash;
    private static byte[] _signatureHash;

    public static byte[] GetBytesToSign(string unsignedPdf, string tempPdf, string signatureFieldName, byte[] x509Signature)
    {
        if (System.IO.File.Exists(tempPdf))
            System.IO.File.Delete(tempPdf);

        var chain = new List<Org.BouncyCastle.X509.X509Certificate>
        {
            Org.BouncyCastle.Security.DotNetUtilities.FromX509Certificate(new X509Certificate2(x509Signature))
        };

        Org.BouncyCastle.X509.X509Certificate certificate = chain.ElementAt(0);

        using (PdfReader reader = new PdfReader(unsignedPdf))
        {
            using (FileStream os = System.IO.File.OpenWrite(tempPdf))
            {
                PdfStamper stamper = PdfStamper.CreateSignature(reader, os, '\0');

                PdfSignatureAppearance appearance = stamper.SignatureAppearance;

                appearance.SetVisibleSignature(new Rectangle(36, 748, 250, 400), 1, signatureFieldName);

                appearance.Certificate = chain[0];

                IExternalSignatureContainer external = new ExternalBlankSignatureContainer(PdfName.ADOBE_PPKLITE, PdfName.ADBE_PKCS7_DETACHED);

                MakeSignature.SignExternalContainer(appearance, external, 8192);

                Stream data = appearance.GetRangeStream();

                byte[] hash = DigestAlgorithms.Digest(data, "SHA256");

                var signature = new PdfPKCS7(null, chain, "SHA256", false);

                byte[] signatureHash = signature.getAuthenticatedAttributeBytes(hash, null, null, CryptoStandard.CMS);

                _signature = signature;
                _apperance = appearance;
                _hash = hash;
                _signatureHash = signatureHash;

                return signatureHash;
            }
        }
    }

    public static void EmbedSignature(string tempPdf, string signedPdf, string signatureFieldName, byte[] signedBytes)
    {
        using (PdfReader reader = new PdfReader(tempPdf))
        {
            using (FileStream os = File.OpenWrite(signedPdf))
            {
                _signature.SetExternalDigest(signedBytes, null, "RSA");

                byte[] encodedSignature = _signature.GetEncodedPKCS7(_hash, null, null, null, CryptoStandard.CMS);

                IExternalSignatureContainer external = new MyExternalSignatureContainer(encodedSignature);

                MakeSignature.SignDeferred(reader, signatureFieldName, os, external);
            }
        }
    }

    private class MyExternalSignatureContainer : IExternalSignatureContainer
    {
        private readonly byte[] signedBytes;

        public MyExternalSignatureContainer(byte[] signedBytes)
        {
            this.signedBytes = signedBytes;
        }

        public byte[] Sign(Stream data)
        {
            string strResp = File.ReadAllText(@"C:\Users\Digital\Content\KYC_responseXML.txt");
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.LoadXml(strResp);
            string strDsc = xmlDoc.SelectSingleNode("EsignResp/Signatures/DocSignature").InnerText;
            return Convert.FromBase64String(strDsc);
        }

        public void ModifySigningDictionary(PdfDictionary signDic)
        {

        }
    }
}

Web 服务返回以下 XML 签名:

该 XML 文件似乎没有任何与之关联的样式信息。文档树如下所示。

<EsignResp errCode="NA" errMsg="NA" resCode="957C7BF1B9A9F1473E358F6F0D3FC200CB48A253" status="1" ts="2018-11-15T09:55:02" txn="UKC:eSign:5306:20181115095351206">
<UserX509Certificate>
MIIFtjCCBJ6gAwIBAgIEWxeBRzANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCSU4xMTAvBgNVBAoTKE5TREwgZS1Hb3Zlcm5hbmNlIEluZnJhc3RydWN0dXJlIExpbWl0ZWQxHTAbBgNVBAsTFENlcnRpZnlpbmcgQXV0aG9yaXR5MSIwIAYDVQQDExlOU0RMZUdvdklzc3VpbmdDQTIwMThUZXN0MB4XDTE4MTExNTA0MjUwMloXDTE4MTExNTA0NTUwMVowggFLMRAwDgYDVQQIEwdHdWphcmF0MQ8wDQYDVQQREwYzOTQ2NTAxTjBMBgNVBC4TRTE5OTJNMUI5NDhGNkIwQUM5MkY5MUIxMjBGOEQyMjBGMkJGMkMwRUVFQjBCMENGNkU3MDAxRkVDMjVBQkU3MEM1MDQ3QjENMAsGA1UEDBMEMDkzNzFSMFAGA1UELQNJADAxMDAwNTA5Wk9sWlVJWDJGMTlWcXJwUVN4YUZ0NjZkMW9ldmZpbllocHI2TXN4QXlYQXI3MCttRnJLQXBJOE5wT1BLMG1zNDEpMCcGA1UEQRMgY2IxNjYyNzgNDYzNDZiYjg4M2I1NGI2ZGM2MWJlNzcxETAPBgNVBAoTCFBlcnNvbmFsMQswCQYDVQQGEwJJTjEoMCYGA1UEAxMfQmFoZWxpbSBBYmR1bG1hbm5hbiBBYmR1bHNhdHRhcjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABHzwDifYLBhJfjKTgtaACz77Nm/EM3INgefVdsDkwMexp52vssDxu7jN/yCXCJWOThOHeWfTQozWP1t87J+EsOajggIwMIICLDALBgNVHQ8EBAMCBsAwgaUGA1UdIASBnTCBmjCBlwYHYIJkZAIEATCBizA/BggrBgEFBQcCARYzaHR0cHM6Ly8xMjEuMjQwLjkuOC9jcHMvTlNETGUtR292LUNBLUNQUy12ZXIxLjAucGRmMEgGCCsGAQUFBwICMDwMOkFhZGhhYXItZUtZQy1PVFAgQ2xhc3MgQ2VydGlmaWNhdGUgaXNzdWVkIGJ5IE5TREwgZS1Hb3YgQ0EwTgYIKwYBBQUHAQEEQjBAMD4GCCsGAQUFBzAChjJodHRwczovLzEyMS4yNDAuOS44L3JlcG9zaXRvcnkvTlNETGUtR292Q0EyMDE4LmNlcjCB5AYDVR0fBIHcMIHZMDWgM6Axhi9odHRwOi8vMTIxLjI0MC45LjgvY3JsL05TRExlR292VUFUSXNzdWluZ0NBLmNybDCBn6CBnKCBmaSBljCBkzELMAkGA1UEBhMCSU4xMTAvBgNVBAoTKE5TREwgZS1Hb3Zlcm5hbmNlIEluZnJhc3RydWN0dXJlIExpbWl0ZWQxHTAbBgNVBAsTFENlcnRpZnlpbmcgQXV0aG9yaXR5MSIwIAYDVQQDExlOU0RMZUdvdklzc3VpbmdDQTIwMThUZXN0MQ4wDAYDVQQDEwVDUkw2NjAfBgNVHSMEGDAWgBTSGuo/qezZNRnR1RvxYGbZw9QjFDAdBgNVHQ4EFgQUZYy9fj/1CqZ19ZWpZeOYFmHKSnwwDQYJKoZIhvcNAQELBQADggEBAHZblBpACyNn2gFHxZcx1ezyIU29HGacChWlzCdTiSGAZG492wVnEFljXGM4RhVP0mSA/SsCibORI4zHSyyf56DZoNTrHJrOxU+nxqOY1Ss1E0kjWVcyEAmlPYqY7I8pTiNibxGg59ibezjNV4uSULcClXq+e+rcnun2pBail9ReSkOQJiLL7pHHKAqdBP6sxvT0nhD/bxnzYc2aVrqwCOp1nErx8csBISxzTOvo0zPfrGaWWyDWShhkH2FKXyShZRdT9W98EBOP1fyx9Bg1XrlOdtLNR3Ex7ZnVhRaBPjkkNB37yP8Vx5OMZ8lzTOgdw0FKbV4A1rc0UdJvRz62e+w=
</UserX509Certificate>
<Signatures>
<DocSignature error="" id="1" sigHashAlgorithm="SHA256">
MIILXAYJKoZIhvcNAQcCoIILTTCCC0kCAQExDzANBglghkgBZQMEAgEFADALBgkqhkiG9w0BBwGgggnQMIIFtjCCBJ6gAwIBAgIEWxeBRzANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCSU4xMTAvBgNVBAoTKE5TREwgZS1Hb3Zlcm5hbmlIEluZnJhc3RydWN0dXJlIExpbWl0ZWQxHTAbBgNVBAsTFENlcnRpZnlpbmcgQXV0aG9yaXR5MSIwIAYDVQQDExlOU0RMZUdvdklzc3VpbmdDQTIwMThUZXN0MB4XDTE4MTExNTA0MjUwMloXDTE4MTExNTA0NTUwMVowggFLMRAwDgYDVQQIEwdHdWphcmF0MQ8wDQYDVQQREwYzOTQ2NTAxTjBMBgNVBC4TRTE5OTJNMUI5NDhGNkIwQUM5MkY5MUIxMjBGOEQyMjBGMkJGMkMwRUVFQjBCMENGNkU3MDAxRkVDMjVBQkU3MEM1MDQ3QjENMAsGA1UEDBMEMDkzNzFSMFAGA1UELQNJADAxMDAwNTA5Wk9sWlVJWDJGMTlWcXJwUVN4YUZ0NjZkMW9ldmZpbllocHI2TXN4QXlYQXI3MCttRnJLQXBJOE5wT1BLMG1zNDEpMCcGA1UEQRMgY2IxNjYyNzgyNDYzNDZiYjg4M2I1NGI2ZGM2MWJlNzcxETAPBgNVBAoTCFBlcnNvbmFsMQswCQYDVQQGEwJJTjEoMCYGA1UEAxMfQmFoZWxpbSBBYmR1bG1hbm5hbiBBYmR1bHNhdHRhcjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABHzwDifYLBhJfjKTgtaACz77Nm/EM3INgefVdsDkwMexp52vssDxu7jN/yCXCJWOThOHeWfTQozWP1t87J+EsOajggIwMIICLDALBgNVHQ8EBAMCBsAwgaUGA1UdIASBnTCBmjCBlwYHYIJkZAIEATCBizA/BggrBgEFBQcCARYzaHR0cHM6Ly8xMjEuMjQwLjkuOC9jcHMvTlNETGUtR292LUNBLUNQUy12ZXIxLjAucGRmMEgGCCsGAQUFBwICMDwMOkFhZGhhYXItZUtZQy1PVFAgQ2xhc3MgQ2VydGlmaWNhdGUgaXNzdWVkIGJ5IE5TREwgZS1Hb3YgQ0EwTgYIKwYBBQUHAQEEQjBAMD4GCCsGAQUFBzAChjJodHRwczovLzEyMS4yNDAuOS44L3JlcG9zaXRvcnkvTlNETGUtR292Q0EyMDE4LmNlcjCB5AYDVR0fBIHcMIHZMDWgM6Axhi9odHRwOi8vMTIxLjI0MC45LjgvY3JsL05TRExlR292VUFUSXNzdWluZ0NBLmNybDCBn6CBnKCBmaSBljCBkzELMAkGA1UEBhMCSU4xMTAvBgNVBAoTKE5TREwgZS1Hb3Zlcm5hbmNlIEluZnJhc3RydWN0dXJlIExpbWl0ZWQxHTAbBgNVBAsTFENlcnRpZnlpbmcgQXV0aG9yaXR5MSIwIAYDVQQDExlOU0RMZUdvdklzc3VpbmdDQTIwMThUZXN0MQ4wDAYDVQQDEwVDUkw2NjAfBgNVHSMEGDAWgBTSGuo/qezZNRnR1RvxYGbZw9QjFDAdBgNVHQ4EFgQUZYy9fj/1CqZ19ZWpZeOYFmHKSnwwDQYJKoZIhvcNAQELBQADggEBAHZblBpACyNn2gFHxZcx1ezyIU29HGacChWlzCdTiSGAZG492wVnEFljXGM4RhVP0mSA/SsCibORI4zHSyyf56DZoNTrHJrOxU+nxqOY1Ss1E0kjWVcyEAmlPYqY7I8pTiNibxGg59ibezjNV4uSULcClXq+e+rcnun2pBail9ReSkOQJiLL7pHHKAqdBP6sxvT0nhD/bxnzYc2aVrqwCOp1nErx8csBISxzTOvo0zPfrGaWWyDWShhkH2FKXyShZRdT9W98EBOP1fyx9Bg1XrlOdtLNR3Ex7ZnVhRaBPjkkNB37yP8Vx5OMZ8lzTOgdw0FKbV4A1rc0UdJvRz62e+wwggQSMIIC+qADAgECAgRalYv+MA0GCSqGSIb3DQEBCwUAMIGDMQswCQYDVQQGEwJJTjExMC8GA1UEChMoTlNETCBlLUdvdmVybmFuY2UgSW5mcmFzdHJ1Y3R1cmUgTGltaXRlZDEdMBsGA1UECxMUQ2VydGlmeWluZyBBdXRob3JpdHkxIjAgBgNVBAMTGU5TRExlR292SXNzdWluZ0NBMjAxOFRlc3QwHhcNMTgwMjI3MTYxOTAzWhcNMjMwMjI3MTY0OTAzWjCBgzELMAkGA1UEBhMCSU4xMTAvBgNVBAoTKE5TREwgZS1Hb3Zlcm5hbmNlIEluZnJhc3RydWN0dXJlIExpbWl0ZWQxHTAbBgNVBAsTFENlcnRpZnlpbmcgQXV0aG9yaXR5MSIwIAYDVQQDExlOU0RMZUdvdklzc3VpbmdDQTIwMThUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAl2NTpJJWbR3OPHY5r2ldRSwGKiEImn+uHf8fKLkkLwypERmkz6otgPExuC51ZneFLXtzReNRzrYoP2FkiNw2LkXbYK0tg9tZ0KdzsuGPtuYfvu6EG0bCO2XmRePrzyXBdEbWQw501rLkRGxxq4EsgWDJgxlClKvcxpH1f3IN940moQz3GktVMF4e3WF6GnkMSY9bcAKrfGQE6PoR52v+ObkG7sWg8hRGxAo5mVFaIumTq81wkK4v7ZGWZL3cjinZb82E7f9PTOtPZlHzfcMct2U6+4ldAwH+jp3YrBTeSw7/HQbPclR9pqW22bByw0nne/DQYHo6hHTUM6afiKwEewIDAQABo4GLMIGIMCsGA1UdEAQkMCKADzIwMTgwMjI3MTYxOTAzWoEPMjAyMzAyMjcxNjQ5MDNaMAsGA1UdDwQEAwIBBjAfBgNVHSMEGDAWgBTSGuo/qezZNRnR1RvxYGbZw9QjFDAdBgNVHQ4EFgQU0hrqP6ns2TUZ0dUb8WBm2cPUIxQwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAdeGegyhzT279eGyMriBYUN+bwtyKFFjotpeuUl0o8wYDDZHamddKj6bCW9reNrUCgOwronG6EU8P8WcLQHvbtcqsi8PZ5CqBK1S6xh09fvgqQwVFkMD2Y2fv7Nlr0P7+bjDSbfgu5XizxFe5WUY/P8bgVU1gLvRZEMo4Q6oV4eXPdWiE77wwcwAwMDD2EgpPY/HOjpNOiJzhefo0sjHMxQaQPRliclBpHM+EVmFX0NZ06nK2Ou9WkeEV9CGRlldZAgQxV5cAU9zjFIZFUwcbl7R7NF9NbdEXaHNlXFjhhITLQors47oTu+ukbNeyUl3d5/L+CDUZHNVDtDCKNjucyDGCAVAwggFMAgEBMIGMMIGDMQswCQYDVQQGEwJJTjExMC8GA1UEChMoTlNETCBlLUdvdmVybmFuY2UgSW5mcmFzdHJ1Y3R1cmUgTGltaXRlZDEdMBA1UECxMUQ2VydGlmeWluZyBBdXRob3JpdHkxIjAgBgNVBAMTGU5TRExlR292SXNzdWluZ0NBMjAxOFRlc3QCBFsXgUcwDQYJYIZIAWUDBAIBBQCgSzAYBgkqhkiG9w0BCQMxCwYJKoZIhvcNAQcBMC8GCSqGSIb3DQEJBDEiBCBmMFeZ2XrccWaU+qOuyzuCE2p2pX4EcPsonc9ye4MwSzAUBggqhkjOPQQDAgYIKoZIzj0DAQcERjBEAiA803FSntU+Ao7xqJ0bsF5EXG4T53UWnVeUn+UqjcQ1/wIgVZ/M9XH5xzew9+/dLnP9P574jszJPg7/IrtRVyFP4tc=
</DocSignature>
</Signatures>
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
<SignedInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
<CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
<SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>
<Reference URI="">
<Transforms>
<Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
</Transforms>
<DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
<DigestValue>zcFiuaTy/HajJpSKCS/DtAZ8b+TMTPfO+Na7dLP38i4=</DigestValue>
</Reference>
</SignedInfo>
<SignatureValue>
qOJyQroX0Rr53prUuRSCAFKQZ77SOBXxM3x8iwk7GgrfOjdItK+/MMXes8K39Hy2jvzJuEtBai5nx4XiWrfHWThYcnkD/iuQb+Rs/NC9blJj5EdYSLlrZ6UAT2NYU70WKgbrteZiSgkk/PAyPTTwZzxtiExN5aPpalX0OkuHhrXnmvnssc4taaFNP3BfJ4JJphJiUgq02DLmCtvRI25Qg0H2kMpLZFiGNxCZTXck2hwDLpO8RVb9k6Fn8DZhWDWLEbEPNHb6CoAMsvTu7iSC9VMpq7c2scAeg2qVRFf63tmkAfbQZs7boWrmj96JwVj5P7K95UzH8ku+WehIm+8w==
</SignatureValue>
<KeyInfo>
<KeyValue>
<RSAKeyValue>
<Modulus>
0o9vohWZ3ztI9ea8D/zUEUBRq6c82BE7sFmr1hNMeuGSJQFf39ceesRtGUzlUYVWXcU23P8sVZ5419CHh7ApFzUXaLD72i/2d5FFI0n3iRlTQec9PEUHyrvOCVDpqBhbnrO/EHBqRluUQJTQUtMu5mhPNFV7IIJMTEAsUhCL9adZXXQK9NeK0foRr29Oq7VdEGfSeLzHIibpQmhNPh89oJXqu0cmbNSW4J4i2GmwHQpmsmHaSQcgh4mgVrykO64pAKXPreAPipDHQM1l/e5hilYlWfLHxhC5ObTCTcydQ218IVulFOFhdQt7xVV61TOmoTC2elhWbDqoLJBVU5mBfQ==
</Modulus>
<Exponent>AQAB</Exponent>
</RSAKeyValue>
</KeyValue>
<X509Data>
<X509SubjectName>
ITC INFRASTRUCTURE LIMITED
</X509SubjectName>
<X509Certificate>
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
</X509Certificate>
</X509Data>
</KeyInfo>
</Signature>
</EsignResp>

None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么在 C# 中使用 PKCS7 和 X509Certificate 打开数字签名的 pdf 文档时出现错误? 的相关文章

随机推荐

  • SQL Server CE数据库大小问题

    我有一份来自一家倒闭公司的申请 它似乎使用 SQL Server CE 数据库 我搜遍了系统也没找到 sdf文件 看来数据库已经变得太大了 知道如何找到数据库并更改最大大小吗 错误信息 无法记录应用程序启动 System Data Enti
  • 最长公共子序列:为什么这是错误的?

    int lcs char A char B int m strlen A int n strlen B int X malloc m sizeof int int Y malloc n sizeof int int i int j for
  • 将 MVC 2 升级到 MVC 3 视图问题

    我正在尝试将现有的 ASP net MVC 2 Web 应用程序升级到 MVC 3 这样我就可以使用 Razor Viewengine 等的优点said http weblogs asp net scottgu archive 2010 0
  • 如何在Python中使图像适合标签

    所以在 python 中我有一个用于显示图像的标签 但图像相当大 超出了标签的大小 有没有办法加载图像以适合标签而不调整它们的大小 这就是我现在所做的 labelWidth top winfo screenwidth labelHeight
  • Railsauthenticate_or_request_with_http_basic

    在我的 RoR 应用程序中 我需要使用基本身份验证来保护页面 并且我希望每次用户链接到该页面时都会询问凭据 所以我在操作之前添加了一个过滤器 如下所示 before filter request confirm only gt delete
  • 在react-js中播放声音

    我尝试在react js 上播放声音 但无法启动 在获取 InitialState 之前 我在 ReactClass 中初始化了声音变量 var App React createClass audio new Audio files aud
  • 在 Android 中创建选项菜单

    我正在尝试在 android 中制作一个选项菜单 如下链接http developer android com guide topics ui menus html options menu http developer android c
  • 根据数据库结果设置 Yii2 catchAll 路由

  • vh 中的最小高度与身体的百分比?

    我试图理解代码 为什么需要指定 body body position relative overflow hidden min height 100vh 将 html 设置为 min height 100vh html height 100
  • 在 powershell 中将新的键值对添加到 JSON 文件。

    我有一个现有的 JSON 文件 其中包含以下内容 buildDate 2017 08 16 version v1 2 0 如何将新的键值对添加到现有的 JSON 文件中 例如 我想采用上面的 JSON 并最终得到以下结果 buildDate
  • Rollup ESM 生成损坏的导入

    我想将 typescript React App 作为组件捆绑到 ES 模块或 UMD 中 但是生成的 ES 包会产生无效的模块 js 在捆绑包上它给了我这个提示 但我找不到任何解决方案 Missing global variable na
  • 使用 Sharepoint 2013 REST Api / CSOM 检索发布图像字段

    我们使用 Sharepoint 2013 REST API 从 Sharepoint 获取所有新闻项目 我们制作了一个自定义 ContentType Newsitem 具有多个属性 包括发布图像字段 var contentTypeId 0x
  • 使用 expo go 保持 firebase 登录的最佳方法

    我正在尝试使用 React Native 制作一个应用程序Expo Go 已经成功让谷歌登录工作 一切都很好 不幸的是 用户的登录在应用程序重新启动之间不会保留 起初 我认为这是一个异步存储问题 但我可以在重新启动之间将项目保存在存储中 我
  • ORA-01735: 无效的 ALTER TABLE 选项 - Toad

    当我在 Toad 中执行下面的 SQL 时 它会抛出 ORA 01735 无效的 ALTER TABLE 选项 ALTER TABLE CALCULATE ADD CAL METHOD VARCHAR2 50 REMARKS VARCHAR
  • ClientRequestFilter 与 ContainerRequestFilter

    我知道过滤器用于处理请求 并且可以使用 http 标头和 httpmethods 执行操作 但我很困惑 有什么区别ClientRequestFilter and ContainerRequestFilter 什么场景下我们必须使用Clien
  • DBContext Find with Includes - 其中带有主键的 lambda

    我正在编写一个通用存储库以使用 DBContext 与 EF 交互 我有一个通用的 Get 方法 它接收主键值并返回实体 public class DALRepository
  • 自动调整标签字体大小

    For a System Windows Forms Label有没有办法根据标签大小自动调整标签字体大小 class AutoFontLabel Label public AutoFontLabel base this AutoEllip
  • 具有多种模式的 Lua string.gsub

    我正在努力重命名包含不需要的字母的电影标题 这string gsub可以用 nil 值替换字符串 但我有大约 200 个字符串模式需要用 替换 现在我必须string gsub对于每个模式 我在想是否有一种方法可以将所有字符串模式放入单个字
  • Linux 中串行端口描述符块上的“关闭”函数

    最近我发现了一个对我来说很新的问题 我很感激建议 我正在 Linux 上使用 termios 函数进行串行通信 我实际上没有使用真正的串口 而是使用虚拟小工具串口驱动程序 dev ttyGS0 文件描述符以非阻塞方式打开 我的程序定期生成数
  • 为什么在 C# 中使用 PKCS7 和 X509Certificate 打开数字签名的 pdf 文档时出现错误?

    我正在尝试使用签名 pdf 文件PKCS7 and X509Certificate但是当我在 Adob e 中打开签名的 pdf 文件时出现以下错误 文件自签署以来已被更改或损坏 文档哈希 66305799d97adc716694faa3a