`

数字签名技术(C#源代码)

    博客分类:
  • C#
阅读更多

/*
 * 数字签名的工作方法:
 * 报文的发送方从报文文本中生成一个散列值(或报文摘要)。
 * 发送方用自己的私人密钥对这个散列值进行加密来形成发送方的数字签名。
 * 然后,这个数字签名将作为报文的附件和报文一起发送给报文的接收方。
 * 报文的接收方首先从接收到的原始报文中计算出散列值(或报文摘要),
 * 接着再用发送方的公用密钥来对报文附加的数字签名进行解密。
 * 如果两个散列值相同、那么接收方就能确认该数字签名是发送方的。
 * 通过数字签名能够实现对原始报文的鉴别。
 */

using System;
using System.Text;
using System.Security.Cryptography;

namespace DigitalSignature
{
    /*此算法架构:RSA + SHA1
     */

    //信息和签名的封包
    public struct DS
    {
        public byte[] data;
        public byte[] signature;
    }

    class Program
    {
        static DSACryptoServiceProvider dsa = new DSACryptoServiceProvider();   //创建了公钥和私钥对

        //创建数字签名
        DS CreateSignature(string strData)
        {
            SHA1Managed sha1 = new SHA1Managed();
            DSASignatureFormatter sigFormatter = new DSASignatureFormatter(dsa);

            byte[] data_Bytes = Encoding.ASCII.GetBytes(strData);
            byte[] hash_Bytes = sha1.ComputeHash(data_Bytes);
            sigFormatter.SetHashAlgorithm("SHA1");
            byte[] signedHash = sigFormatter.CreateSignature(hash_Bytes);

            DS ds = new DS();
            ds.data = hash_Bytes;
            ds.signature = signedHash;
            return ds;
        }

        //验证数字签名
        bool VerifySignature(DS ds)
        {
            byte[] remote_HashedValue = ds.data;
            byte[] remote_SignedHash = ds.signature;
            DSASignatureDeformatter sigDeformatter = new DSASignatureDeformatter(dsa);
            sigDeformatter.SetHashAlgorithm("SHA1");

            if (sigDeformatter.VerifySignature(remote_HashedValue, remote_SignedHash))
            {
                return true;
            }

            return false;
        }

        static void Main(string[] args)
        {
            string strMsg = "JGLRIEHDKVJFLHGJGYRKPYEVCNADWQKGLBUFOWDT";   //报文文本
            DS ds = new DS();
            Program prog = new Program();

            ds = prog.CreateSignature(strMsg);

            //模拟签名在传输途中遭到破坏或修改
            //...
            //ds.signature = new byte[40];

            if (prog.VerifySignature(ds))
            {
                //验证通过
                Console.WriteLine("The signature used to sign the hash has been verified.");
            }
            else
            {
                //验证未通过
                Console.WriteLine("The signature used to sign the hash doesn't match the hash.");
            }
            Console.ReadLine();
        }
    }
}
 
分享到:
评论

相关推荐

    C#实现的数字签名算法源代码

    这个文章和附件的源代码用Crypto++,C#,java语言实现数字签名消息的签发与验证过程。我们使用一个tuple { message, signature }存储签发的消息,当验证一个消息的时候,需要提供消息、签名和签名者的公共密钥。

    RSA数字签名源代码

    通过C#实现RSA数字签名源代码,可以为你的应用程序提供强大的安全保障。例如,在网络通信、文件传输、电子合同等领域,RSA数字签名能够有效地防止中间人攻击,保护用户数据不被篡改,确保交易的合法性。在阅读和理解...

    AppSingerAPk签名工具C#源代码

    Android系统要求每个安装包在安装到设备上之前都必须经过数字签名,这一步骤验证了应用的身份,确保应用在分发过程中未被篡改。签名过程使用私钥进行,而对应的公钥则用于验证签名的有效性。通过这种方式,用户可以...

    C#实现数字签名算法

    这些源代码可以作为学习和开发的参考,帮助开发者更好地理解和应用C#中的数字签名技术。 总之,C#中的数字签名算法是基于非对称加密和哈希函数的组合,通过源代码的学习和实践,开发者可以增强对网络安全的理解,...

    加密文件 C#源代码

    在给定的"加密文件 C#源代码"主题中,我们可以深入探讨C#编程语言如何用于文件加密,特别是在Visual Studio 2005环境下。C#是一种面向对象的编程语言,由微软开发,广泛应用于构建Windows桌面应用、Web应用和服务。...

    好用的c#代码混淆源码

    "好用的c#代码混淆源码"正是这样一个工具,旨在帮助开发者通过加密和混淆其C#源代码来提高代码的安全性。 混淆源码的主要目的是使得恶意用户难以理解或逆向工程你的代码,从而防止非法复制、修改或者破解。通常,...

    rsa算法 c# 源代码 挺好

    在描述中提到的“很容易懂的程序”,可能是指这个C#源代码编写得清晰易读,遵循了良好的编程规范,便于其他开发者理解和使用。同时,“界面挺漂亮”可能意味着这个程序包含了一个用户界面,使得用户可以直接与程序...

    c#编写的数字签名演示和文件摘要生成程序

    数字签名是一种基于公钥加密技术的非对称加密方法,它能够确保数据在传输过程中的完整性和发送者的身份。在C#中,我们可以使用System.Security.Cryptography命名空间内的类来实现这一过程。例如,RSA类可以用于创建...

    C#加密程序源代码.rar

    本压缩包“C#加密程序源代码.rar”包含了一些关于C#语言中加密算法实现的源代码,这为我们提供了深入理解C#编程和加密技术的宝贵资源。 加密技术是信息安全领域的重要组成部分,用于保护数据的安全,防止未经授权的...

    C#电子签名功能

    在压缩包中的"ElectronicSignatureSaveDisplay"可能是一个项目文件或执行文件,它包含了整个电子签名功能的源代码或者编译后的可执行文件。对于初学者来说,通过阅读和分析这个文件,可以学习到如何在C#中实现图形...

    c#文件加密源代码 加密源码

    首先,我们来理解“C#文件加密源代码 加密源码”这个主题。这通常意味着我们需要了解如何使用C#编写程序来对文件进行加密和解密操作。在C#中,我们可以利用内置的System.Security.Cryptography命名空间,该命名空间...

    C#最简单的加密解密C#源代码

    5. **哈希与数字签名**:在加密之外,哈希函数如SHA-256常用于验证数据完整性,而数字签名(如RSA签名)用于确保数据未被篡改。 6. **资源文件(JiaMicheshi.resx)**:在C#项目中,.resx文件用于存储应用程序的...

    c# 串口调试工具源代码

    《C#串口调试工具源代码解析》 在IT领域,串口通信是设备间进行数据传输的一种常见方式,尤其在嵌入式系统和工业控制中广泛应用。C#作为.NET框架下的主要编程语言,提供了丰富的库支持串口操作。本文将深入解析一款...

    C#390-口令加密Exe源代码

    本资源"**C#390-口令加密Exe源代码**"提供了一种使用C#编程语言实现口令加密的方法,这对于理解密码学原理和安全编码实践具有很高的价值。 C#是一种广泛应用的面向对象的编程语言,它内置了丰富的类库,支持多种...

    ASP基于RSA的数字签名的设计与实现(源代码+论文).zip

    源代码中可能包含ASP.NET页面、C#后台代码以及数据库交互的部分,展示了如何在实际应用中整合RSA算法实现数字签名。论文部分则可能详细解释了设计思路、关键技术点和实现流程。 通过学习这个项目,开发者不仅可以...

    itextsharp signatures 数字签名应用的官方应用代码.rar

    7. **`signatures`**:这个文件可能是代码库中的一个目录,包含了具体实现签名和验证功能的C#源代码文件。在这里,你可能会找到如`SignPdf.cs`、`VerifyPdf.cs`等文件,分别对应签名和验证的操作。 通过学习和理解...

    [计算机项目]基于asp的RSA数字签名系统设计与实现(源代码+项目报告).zip

    在提供的"RSA数字签名源代码"文件中,我们可以看到具体的实现细节,包括RSA密钥对的生成、签名过程和签名验证过程。这部分代码通常会包含以下几个关键步骤: 1. **密钥生成**:使用特定的随机数生成器生成两个大...

    C# 文件加密 实例源码(加密解密)

    AES是目前广泛使用的对称加密算法,适合大量数据的加密,而RSA是非对称加密,适用于密钥交换和数字签名。在这个实例中,可能会使用AES算法,因为其高效且安全性较高。 2. **System.Security.Cryptography**:这是...

    MD5&SHA1数字签名

    而`MD5`可能是一个源代码文件,其中实现了利用CryptoAPI进行MD5和SHA1数字签名的代码。通过编译和运行这个项目,你可以亲自体验和学习如何在C#环境下实现这两种数字签名技术。 总之,MD5和SHA1是两种常见的哈希函数...

Global site tag (gtag.js) - Google Analytics