c#使用SHA256算法实现对文件的加密和解密

基于 C# 和 Windows Forms 的文件加密解密应用程序 这是一个基于 C# 和 Windows Forms 的文件加密解密应用程序,该程序具备文件和文件夹的加密解密功能,同时支持日志记录、日志密码管理以及日志查询功能,增强了数据的安全性和可追溯性。 阅读详情

c#使用SHA256算法实现对文件的加密和解密

将当期目录的test.txt加密成文件test1.txt,再将加密后的test1.txt文件解密成test2.txt。

测试代码

static void Main()
{
    MyEncrypt.SHA_Encrypt("test.txt", "test1.txt", "123456");  //文件加密
    MyEncrypt.SHA_Dencrypt("test1.txt", "test2.txt", "123456");  //文件解密
}

加密解密工具类的实现

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security.Cryptography;
using System.IO;
namespace util
{

    public class MyEncrypt
    {
        private const ulong FC_TAG = 0xFC010203040506CF;
        private const int BUFFER_SIZE = 128 * 1024;
        //检验两个Byte数组是否相同 
        private static bool CheckByteArrays(byte[] b1, byte[] b2)
        {
            if (b1.Length == b2.Length)
            {
                for (int i = 0; i < b1.Length; ++i)
                {
                    if (b1[i] != b2[i])
                        return false;
                }
                return true;
            }
            return false;
        }
        /// <param name="password">密码</param> 
        /// <param name="salt"></param> 
        /// <returns>加密对象</returns> 
        private static SymmetricAlgorithm CreateRijndael(string password, byte[] salt)
        {
            PasswordDeriveBytes pdb = new PasswordDeriveBytes(password, salt, "SHA256", 1000);
            SymmetricAlgorithm sma = Rijndael.Create();
            sma.KeySize = 256;
            sma.Key = pdb.GetBytes(32);
            sma.Padding = PaddingMode.PKCS7;
            return sma;
        }
        // 加密文件随机数生成 
        private static RandomNumberGenerator rand = new RNGCryptoServiceProvider();
        // 生成指定长度的随机Byte数组 
        private static byte[] GenerateRandomBytes(int count)
        {
            byte[] bytes = new byte[count];
            rand.GetBytes(bytes);
            return bytes;
        }

        // 加密文件 
        public static void SHA_Encrypt(string inFile, string outFile, string password)
        {
            using (FileStream fin = File.OpenRead(inFile),
            fout = File.OpenWrite(outFile))
            {
                long lSize = fin.Length; // 输入文件长度 
                int size = (int)lSize;
                byte[] bytes = new byte[BUFFER_SIZE]; // 缓存 
                int read = -1; // 输入文件读取数量 
                int value = 0;
                // 获取IV和salt 
                byte[] IV = GenerateRandomBytes(16);
                byte[] salt = GenerateRandomBytes(16);
                // 创建加密对象 
                SymmetricAlgorithm sma = CreateRijndael(password, salt);
                sma.IV = IV;
                // 在输出文件开始部分写入IV和salt 
                fout.Write(IV, 0, IV.Length);
                fout.Write(salt, 0, salt.Length);
                // 创建散列加密 
                HashAlgorithm hasher = SHA256.Create();
                using (CryptoStream cout = new CryptoStream(fout, sma.CreateEncryptor(), CryptoStreamMode.Write),
                chash = new CryptoStream(Stream.Null, hasher, CryptoStreamMode.Write))
                {
                    BinaryWriter bw = new BinaryWriter(cout);
                    bw.Write(lSize);
                    bw.Write(FC_TAG);
                    // 读写字节块到加密流缓冲区 
                    while ((read = fin.Read(bytes, 0, bytes.Length)) != 0)
                    {
                        cout.Write(bytes, 0, read);
                        chash.Write(bytes, 0, read);
                        value += read;
                    }
                    // 关闭加密流 
                    chash.Flush();
                    chash.Close();
                    // 读取散列 
                    byte[] hash = hasher.Hash;
                    // 输入文件写入散列 
                    cout.Write(hash, 0, hash.Length);
                    // 关闭文件流 
                    cout.Flush();
                    cout.Close();
                }
            }
        }
        // 解密文件 
        public static void SHA_Dencrypt(string inFile, string outFile, string password)
        {
            // 创建打开文件流 
            using (FileStream fin = File.OpenRead(inFile),
            fout = File.OpenWrite(outFile))
            {
                int size = (int)fin.Length;
                byte[] bytes = new byte[BUFFER_SIZE];
                int read = -1;
                int value = 0;
                int outValue = 0;
                byte[] IV = new byte[16];
                fin.Read(IV, 0, 16);
                byte[] salt = new byte[16];
                fin.Read(salt, 0, 16);
                SymmetricAlgorithm sma = CreateRijndael(password, salt);
                sma.IV = IV;
                value = 32;
                long lSize = -1;
                // 创建散列对象, 校验文件 
                HashAlgorithm hasher = SHA256.Create();
                using (CryptoStream cin = new CryptoStream(fin, sma.CreateDecryptor(), CryptoStreamMode.Read),
                chash = new CryptoStream(Stream.Null, hasher, CryptoStreamMode.Write))
                {
                    // 读取文件长度 
                    BinaryReader br = new BinaryReader(cin);
                    lSize = br.ReadInt64();
                    ulong tag = br.ReadUInt64();
                    if (FC_TAG != tag)
                        throw new Exception("文件被破坏");
                    long numReads = lSize / BUFFER_SIZE;
                    long slack = (long)lSize % BUFFER_SIZE;
                    for (int i = 0; i < numReads; ++i)
                    {
                        read = cin.Read(bytes, 0, bytes.Length);
                        fout.Write(bytes, 0, read);
                        chash.Write(bytes, 0, read);
                        value += read;
                        outValue += read;
                    }
                    if (slack > 0)
                    {
                        read = cin.Read(bytes, 0, (int)slack);
                        fout.Write(bytes, 0, read);
                        chash.Write(bytes, 0, read);
                        value += read;
                        outValue += read;
                    }
                    chash.Flush();
                    chash.Close();
                    fout.Flush();
                    fout.Close();
                    byte[] curHash = hasher.Hash;
                    // 获取比较和旧的散列对象 
                    byte[] oldHash = new byte[hasher.HashSize / 8];
                    read = cin.Read(oldHash, 0, oldHash.Length);
                    if ((oldHash.Length != read) || (!CheckByteArrays(oldHash, curHash)))
                        throw new Exception("文件被破坏");
                }
                if (outValue != lSize)
                    throw new Exception("文件大小不匹配");
            }
        }
    } 
}
C#数据Encrypt加密Encrypt解密的算法使用 C#数据Encrypt加密Encrypt解密的算法使用 C#数据Encrypt加密Encrypt解密的算法使用,如下图所示的加密和解密的方式 该框架还为在System.Security.Cryptography.Xml中创建和验证基于xml的签名以及在System.Security.Cryptography.X509Certificates中使用数字证书的类型提供了更专门的支持 ... 阅读详情

相关推荐

C#实现SHA256哈希加密算法(含代码实现)

本篇文章介绍了如何使用 C# 编程语言实现 SHA256 哈希加密算法,并提供了完整的源码示例。本篇文章将介绍如何使用 C# 编程语言实现 SHA256 哈希加密算法,并附上完整的源码。在 C# 中实现 SHA256 哈希加密算法非常简单,只需要使用 .NET Framework 提供的相关类即可。在下面的示例代码中,我们将演示如何使用 C# 来计算字符串的 SHA256 哈希值。最后,我们遍历哈希值字节数组,将每个字节转换为两个十六进制字符并添加到字符串构建器中,最终返回字符串构建器的字符串表示形式。

WELL_CODER的博客 4433

c# Aes加解密和SHA256加解密方法

Aes#region AES加密////// aes加码////////////trySHA256/// SHA256加密,并十六进制编码/////////测试密钥第一种是报网络安全专业,现在叫网络空间安全专业,主要专业课程:程序设计、计算机组成原理原理、数据结构、操作系统原理、数据库系统、 计算机网络、人工智能、自然语言处理、社会计算、网络安全法律法规、网络安全、内容安全、数字取证、机器学习,多媒体技术,信息检索、舆情分析等。

Innocence_0的博客 2417

C#: 实现SHA256加密算法

SHA256(安全哈希算法256位)是一种常用的加密算法,用于生成具有固定长度的哈希值。在本文中,我们将使用C#编程语言来实现SHA256加密算法,并提供相应的源代码。这是一个简单的示例,演示了如何使用C#实现SHA256加密算法。你可以根据需要将其集成到你的项目中,以实现更复杂的加密需求。接下来,我们将字节数组转换为十六进制字符串表示,并将其输出到控制台。要运行上述代码,只需将其放入一个C#控制台应用程序项目中,并执行即可。在上面的示例代码中,我们首先定义了一个要进行加密的字符串。然后,我们创建了一个。

CyberWarpX的博客 2128

.NET下对二进制文件进行加密解密(C#)

下面的类实现了文件的加密和解密操作,试验了几种文件类型均没有问题,现在和大家共享一下。namespace MyCryptoHelp{ ///  /// 异常处理类 ///  public class CryptoHelpException : ApplicationException {  public CryptoHelpException(string msg):base(msg)

Julysoft_Studio的专栏 1841

C#实现SHA256加密(附完整源码)

C#实现SHA256加密(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 882

C#加密解密,包括DES、MD5、SHA256

C#加密解密,包括DES、MD5、SHA256

.NET下对二进制文件进行加密解密(转)

下面的类实现了文件的加密和解密操作,试验了几种文件类型均没有问题,现在和大家共享一下。namespace MyCryptoHelp{ ///  /// 异常处理类 ///  public class CryptoHelpException : ApplicationException {  public CryptoHelpException(string msg):base(msg){} } /

hyde82的专栏 1141

国产SR8201F以太网PHY芯片调试避坑指南:从机贴失败到杜邦线救场的实战记录

本文详细介绍了国产SR8201F以太网PHY芯片的调试避坑指南,涵盖硬件设计、PCB布局、SMT贴片及软件驱动等关键环节。通过实战案例解析,帮助工程师解决MII/RMII接口配置、电源设计、信号完整性等典型问题,提升以太网通信稳定性与EMC性能。

c6d7e8f9g的博客 1212

C#加密方法总汇

数据的加密重要性大家皆知,很多情况下需要对数据进行加密处理,但各种重要数据的加密要求不一样,有些需要时可逆的,有些是不要求可逆的,可逆的一般称之为对称加密算法,不可逆的一般可以成为非对称加密算法。如登录密码,一般较好的方式是采用不可逆的加密算法,如MD5、SHA256、哈希数值等,当然也有的采用可逆的强度好一些的加密方式,在选择加密键值的时候,变化一下也算是比较不错的选择。另外一些为了掩人耳目或者

郁闷之春的专栏 1103

unity中简单全景搭建

全景场景能够直观的展现一部分区域的全貌,在全景场景中我们能360°观看周围的景象,仿佛自身就在这个场景中,在场景的外部,我们能发现场景就是一个密封的球体,我们是处在球体的内部观察周围,在球内部观察四周看到的都是球的内表面,所以我们看到的全景其实就是贴在密封球体内的一张全景图片。接下来要介绍的就是如何在unity中用一个球体来搭建全景场景。

qq_31791999的博客 3637

构建基于知识图谱的金融风险关联网络

在金融领域,风险的识别和管理至关重要。传统的风险分析方法往往只能处理单一维度的数据,难以全面捕捉金融市场中复杂的风险关联关系。构建基于知识图谱的金融风险关联网络的目的在于整合多源异构的金融数据,通过知识图谱的方式清晰地展示金融实体之间的复杂关系,从而更准确地识别潜在的金融风险,为金融机构的风险管理决策提供有力支持。本项目的范围涵盖了从金融数据的收集、预处理,到知识图谱的构建,再到金融风险关联网络的搭建和分析。

SuperAGI2025 1418

[转].NET下对二进制文件进行加密解密(C#)

本文转自:http://blog.youkuaiyun.com/veryhappy/archive/2006/01/09/574152.aspx下面的类实现了文件的加密和解密操作,试验了几种文件类型均没有问题,现在和大家共享一下。using System;using System.Collections.Generic;using System.Text;using System.

freeliver54的专栏 504

基于 FastAPI + LangGraph + LLM 大语言模型的通用 Agent 多智能体系统架构设计与开发实战、产业应用

FastAPI是一个现代、快速(高性能)的Python Web框架,专门用于构建API。它由Sebastián Ramírez(@tiangolo)创建,基于Starlette(用于Web部分)和Pydantic(用于数据部分)构建。性能优先:FastAPI是当前最快的Python Web框架之一,性能与NodeJS和Go相当。这得益于其基于Starlette的异步架构,能够充分利用Python 3.6+的async/await特性。开发效率。

AI天才研究院 229

C# 加密解密文件

C# 加密解密文件 using System; using System.Collections.Generic; using System.Text; using System.Security.Cryptography; using System.IO; namespace DESFile { /// <...

weixin_30522095的博客 108

G.6 PaddleHub实战篇{ERNIE实现文新闻本分类、ERNIE3.0 实现序列标注}【四】

百度飞桨:ERNIE 3.0 、通用信息抽取 UIE、paddleNLP的安装使用[一]_汀、的博客-优快云博客PaddleHub--飞桨预训练模型应用工具{风格迁移模型、词法分析情感分析、Fine-tune API微调}【一】_汀、的博客-优快云博客 PaddleHub--{超参优化AutoDL Finetuner}【二】_汀、的博客-优快云博客PaddleHub实战篇{词法分析模型LAC、情感分类ERNIE Tiny}训练、部署【三】_汀、的博客-优快云博客通过前面几篇文章大家都有一定了解,下面

丨汀、的博客 6185

35、使用 Geo 创建 GitLab 的分布式只读副本

本文详细介绍了如何使用GitLab Geo功能创建分布式只读副本,涵盖数据库主从配置、SSH密钥查找方式更改、通过Web UI添加从节点、激活哈希存储及状态检查等关键步骤。同时提供了常见问题解答和配置流程图,帮助用户快速部署并维护Geo集群,实现跨地域的高效数据同步与高可用架构。

chair的专栏 80

C#常用标准函数库(持续更新中)

using System; using System.Collections.Generic; using System.Text; using System.Collections; //使用Arraylist using System.Security.Cryptography;//加密解密 using System.IO;    //文件操作 using Sys...

二胖的博客 4651

【AUTOSAR-CanNM】-3.1-如何让ECU发出的首帧是NM帧(Tx Nm报文先于Tx App应用报文发出)

如何让ECU发出的首帧是NM帧(Tx Nm报文先于Tx App应用报文发出)

「汽车电子助手」的博客 4723

Rockwell Studio5000 V30 Source Protection EncryptionConfig=“9“

在EncryptionConfig = 9的情况下,引入了盐值、哈希迭代、魔改的AES-256块处理(非标准库调用),罗克韦尔通过魔改这些算法,加入盐值,随机初始向量、数据校验等从算法上增大了配破解的难度。 因为不是标准 AES-CBC,是基于 AES-256 ECB 单块运算自研的密钥流生成器,XOR 流密码模式,加密和解密是同一套运算,对称结构。

sqhlxdl的博客 287

5步VS传统WinForm!AntdUI让界面设计从“土味”到“超模”只需30秒?

摘要:墨瑾轩编程教程《AntdUI的5大魔法步骤》详解如何将传统WinForm升级为现代化UI。教程通过5个核心步骤:安装AntdUI库、控件替换、主题定制、复杂布局构建及实战案例演示,对比传统开发与AntdUI在美观度(动态阴影/动画)、开发效率(拖拽组件VS手工绘制)和主题定制(一键换肤VS重写控件)的显著差异。使用C#代码示例展示按钮动画、3D翻转、聊天界面等特效实现,帮助开发者快速掌握这一基于Ant Design风格的WinForm增强框架。(150字)

java专栏 1125

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

C# JWT加密和解密

C# JWT加密和解密 一、管理NuGet程序包: 二、新建一个Winform项目: using JWT; using JWT.Algorithms; using JWT.Exceptions; using JWT.Serializers; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Lin

韬光养晦 1万+

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

C# 中加密解密算法

本文详细介绍了三种主流加密算法:对称加密(AES/DES)、非对称加密(RSA)和散列算法(MD5/SHA)。对称加密速度快适合大数据,非对称加密安全性高但速度慢,散列算法不可逆适合数据校验。文章提供了C#实现代码,并对比了各算法的特性和应用场景,建议在数据传输时结合AES和RSA,密码存储使用SHA-256加盐,文件校验采用SHA-256。强调应根据安全性、性能和需求选择合适的加密方案,优先使用.NET原生加密类而非自行实现。

weixin_66547608的博客 1620

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

上一篇: 加密算法比较:SHA1,SHA256,MD5
下一篇: 区块链知识,区块链简史
.NET跨平台
博客等级 码龄15年 6066粉丝 738原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值