加密签名

您所在的位置:网站首页 自制数字签名怎么做视频的 加密签名

加密签名

#加密签名| 来源: 网络整理| 查看: 265

加密签名 项目05/10/2023

加密数字签名使用公钥算法提供数据完整性。 如果使用数字签名对数据进行签名,则其他人可验证该签名,并且可证明这些数据确实是你发出的,并且在你签名之后未被更改。 有关数字签名的详细信息,请参阅 Cryptographic Services。

本主题说明如何使用 System.Security.Cryptography 命名空间中的类来生成和验证数字签名。

生成签名

数字签名通常应用于表示较大数据的哈希值。 下面的示例将数字签名应用于哈希值。 首先,创建 RSA 类的新实例以生成公钥/私钥对。 然后,将 RSA 传递到 RSAPKCS1SignatureFormatter 类的新实例。 这将私钥传输给了实际执行数字签名的 RSAPKCS1SignatureFormatter。 必须先指定要使用的哈希算法。然后才可以对哈希代码进行签名。 本示例使用 SHA256 算法。 最后,调用 CreateSignature 方法以执行签名。

Imports System.Security.Cryptography Imports System.Text Module Program Sub Main() Dim alg As SHA256 = SHA256.Create() Dim data As Byte() = Encoding.UTF8.GetBytes("Hello, from the .NET Docs!") Dim hash As Byte() = alg.ComputeHash(data) Dim sharedParameters As RSAParameters Dim signedHash As Byte() ' Generate signature Using rsa As RSA = RSA.Create() sharedParameters = rsa.ExportParameters(True) Dim rsaFormatter As New RSAPKCS1SignatureFormatter(rsa) rsaFormatter.SetHashAlgorithm(NameOf(SHA256)) signedHash = rsaFormatter.CreateSignature(hash) End Using ' The sharedParameters, hash, and signedHash are used to later verify the signature. End Sub End Module using System.Security.Cryptography; using System.Text; using SHA256 alg = SHA256.Create(); byte[] data = Encoding.ASCII.GetBytes("Hello, from the .NET Docs!"); byte[] hash = alg.ComputeHash(data); RSAParameters sharedParameters; byte[] signedHash; // Generate signature using (RSA rsa = RSA.Create()) { sharedParameters = rsa.ExportParameters(false); RSAPKCS1SignatureFormatter rsaFormatter = new(rsa); rsaFormatter.SetHashAlgorithm(nameof(SHA256)); signedHash = rsaFormatter.CreateSignature(hash); } // The sharedParameters, hash, and signedHash are used to later verify the signature. 验证签名

若要验证数据是否是由特定方进行签名的,则必须具有以下信息:

对数据进行签名的一方的公钥。 数字签名。 已签名的数据。 签名方使用的哈希算法。

若要验证由 RSAPKCS1SignatureFormatter 类签署的签名,请使用 RSAPKCS1SignatureDeformatter 类。 必须向 RSAPKCS1SignatureDeformatter 类提供签名者的公钥。 对于 RSA,你至少需要 RSAParameters.Modulus 和 RSAParameters.Exponent 的值来指定公钥。 实现此目的的一种方法是在签名创建期间调用 RSA.ExportParameters,然后在验证过程中调用 RSA.ImportParameters。 生成公钥/私钥对的一方应提供这些值。 首先创建 RSA 对象以保存将验证签名的公钥,然后将 RSAParameters 结构初始化为指定该公钥的模数值和指数值。

下面的代码显示 RSAParameters 结构的共享。 负责创建签名的 RSA 将导出其参数。 然后,这些参数将导入到负责验证签名的新 RSA 实例中。

然后将 RSA 实例传递到 RSAPKCS1SignatureDeformatter 的构造函数以传输密钥。

下面的示例阐释此过程。 在本示例中,假设 sharedParameters、hash 和 signedHash 是由远程方提供的。 远程方已使用 SHA256 算法对 hash 进行签名,从而生成数字签名 signedHash。 RSAPKCS1SignatureDeformatter.VerifySignature 方法验证数字签名是否有效,并且是否已用于对 hash 进行签名。

Imports System.Security.Cryptography Imports System.Text Module Program Sub Main() Dim alg As SHA256 = SHA256.Create() Dim data As Byte() = Encoding.UTF8.GetBytes("Hello, from the .NET Docs!") Dim hash As Byte() = alg.ComputeHash(data) Dim sharedParameters As RSAParameters Dim signedHash As Byte() ' Generate signature Using rsa As RSA = RSA.Create() sharedParameters = rsa.ExportParameters(True) Dim rsaFormatter As New RSAPKCS1SignatureFormatter(rsa) rsaFormatter.SetHashAlgorithm(NameOf(SHA256)) signedHash = rsaFormatter.CreateSignature(hash) End Using ' Verify signature Using rsa As RSA = RSA.Create() rsa.ImportParameters(sharedParameters) Dim rsaDeformatter As New RSAPKCS1SignatureDeformatter(rsa) rsaDeformatter.SetHashAlgorithm(NameOf(SHA256)) If rsaDeformatter.VerifySignature(hash, signedHash) Then Console.WriteLine("The signature is valid.") Else Console.WriteLine("The signature is not valid.") End If End Using End Sub End Module using System.Security.Cryptography; using System.Text; using SHA256 alg = SHA256.Create(); byte[] data = Encoding.ASCII.GetBytes("Hello, from the .NET Docs!"); byte[] hash = alg.ComputeHash(data); RSAParameters sharedParameters; byte[] signedHash; // Generate signature using (RSA rsa = RSA.Create()) { sharedParameters = rsa.ExportParameters(false); RSAPKCS1SignatureFormatter rsaFormatter = new(rsa); rsaFormatter.SetHashAlgorithm(nameof(SHA256)); signedHash = rsaFormatter.CreateSignature(hash); } // Verify signature using (RSA rsa = RSA.Create()) { rsa.ImportParameters(sharedParameters); RSAPKCS1SignatureDeformatter rsaDeformatter = new(rsa); rsaDeformatter.SetHashAlgorithm(nameof(SHA256)); if (rsaDeformatter.VerifySignature(hash, signedHash)) { Console.WriteLine("The signature is valid."); } else { Console.WriteLine("The signature is not valid."); } }

如果签名有效,那么此代码片段显示“The signature is valid”;如果无效,则显示“The signature is not valid”。

另请参阅 加密服务 加密模型 跨平台加密 ASP.NET Core 数据保护


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3