如何在C#中存储文件或文本的数字签名?

如何在C#中存储文件或文本的数字签名?,c#,.net,cryptography,digital-signature,C#,.net,Cryptography,Digital Signature,我正在尝试对文件进行数字签名(不考虑扩展名),但它不是Xml文件。因此,C#的SignedXml文件没有用处。我能够通过使用和生成签名。现在的问题是在何处以及如何存储生成的数字签名。Net中是否有任何标准或API来存储数字签名 更新: 希望签署数据并与客户共享,以便他们可以使用任何标准化工具进行验证。我们正在签名,其他人将进行验证。我们正在共享的文件不支持XML或PDF所支持的签名。这就是问题所在。是的,我们在签名后有字节数组。所以,如果客户想要验证签名,那么需要验证的哈希算法和公共证书信息的相

我正在尝试对文件进行数字签名(不考虑扩展名),但它不是Xml文件。因此,C#的SignedXml文件没有用处。我能够通过使用和生成签名。现在的问题是在何处以及如何存储生成的数字签名。Net中是否有任何标准或API来存储数字签名

更新: 希望签署数据并与客户共享,以便他们可以使用任何标准化工具进行验证。我们正在签名,其他人将进行验证。我们正在共享的文件不支持XML或PDF所支持的签名。这就是问题所在。是的,我们在签名后有字节数组。所以,如果客户想要验证签名,那么需要验证的哈希算法和公共证书信息的相关信息在哪里?用于共享哈希、公共证书、签名。。。我正在研究是否有任何标准机制


但我不知道是否有任何C#或.Net核心API可以用于其他资源类型。

使用容器格式,如加密消息语法或CMS或使用OpenPGP。当然,你必须向接收者表明你使用了它,但事实就是这样。CMS可能是自微软以来最简单的。生成的签名将包含算法规范等。此外,OpenSSL中还有一个实现,例如BouncyCastle for Java。

使用容器格式,如加密消息语法或CMS或使用OpenPGP。当然,你必须向接收者表明你使用了它,但事实就是这样。CMS可能是自微软以来最简单的。生成的签名将包含算法规范等。此外,OpenSSL中还有一个实现,例如BouncyCastle for Java。

假设您希望在eIDAS框架下的EU中创建签名并生成.asice文件,那么有一些c库,如


如果是Java,那么我肯定会推荐

假设您希望在eIDAS框架下在EU中创建签名,并希望生成.asice文件,那么有一些c#库,如


如果它是Java,那么我肯定会推荐

没有存储数字签名的标准。同样的,在哪里存储短语“Hello World!”,也没有标准。它只是一个字节序列,没有特殊的空间。将其存储在您需要的位置,例如文件末尾。签名是一个字节数组,您可以将其作为二进制列存储在数据库中,但没有关于如何存储数据的标准。做最适合你的事情@vasily.sib看起来不仅要签署文件,还要签署文本/字符串,因此您的建议不符合OPneeds@bradbury9,第一句话告诉我OP将“签署一个文件(不考虑扩展名)”,但这与此无关。如果您对一个文件、一个字符串或任何其他一组字节进行签名,则没有特殊的位置可以存储此签名。您可以将其存储在DB中,或存储在相同或其他文件中,或存储在系统注册表中,或存储在网络云上,甚至存储在备用数据流中。这都是你的需要,伙计们别打架了。我已经更新了我的问题以使其更清晰。@Suman他们都同意,尽管没有关于存储数字签名的标准。如果您说您使用的是rsacyptoserviceprovider.SignHash,那么当您看到rsacyptoserviceprovider.VerifyHash时,这一点应该是显而易见的。验证hash也只要求字节数组,它不关心您将它们存储在何处。在何处存储数字签名没有标准。同样的,在哪里存储短语“Hello World!”,也没有标准。它只是一个字节序列,没有特殊的空间。将其存储在您需要的位置,例如文件末尾。签名是一个字节数组,您可以将其作为二进制列存储在数据库中,但没有关于如何存储数据的标准。做最适合你的事情@vasily.sib看起来不仅要签署文件,还要签署文本/字符串,因此您的建议不符合OPneeds@bradbury9,第一句话告诉我OP将“签署一个文件(不考虑扩展名)”,但这与此无关。如果您对一个文件、一个字符串或任何其他一组字节进行签名,则没有特殊的位置可以存储此签名。您可以将其存储在DB中,或存储在相同或其他文件中,或存储在系统注册表中,或存储在网络云上,甚至存储在备用数据流中。这都是你的需要,伙计们别打架了。我已经更新了我的问题以使其更清晰。@Suman他们都同意,尽管没有关于存储数字签名的标准。如果您说您使用的是rsacryptserviceprovider.SignHash,那么当您看到rsacryptserviceprovider.VerifyHash时,应该很明显,它也只要求字节数组,它不关心您将它们存储在哪里。