计算文件的MD5值上传到服务器 下载验证文件是否被篡改

本文涉及的产品
函数计算FC,每月15万CU 3个月
简介:

using System;
using System.Windows.Forms;
using System.Security.Cryptography;
using System.IO;

namespace 计算文件的MD5
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //创建与服务器的连接
            FtpClient fc = new FtpClient("127.0.0.1","test","123");
            //上传本地文件到服务器命名为02...文件
            fc.Upload(new FileInfo("textFilePath.Text"), "02" + DateTime.Now.ToString("yyyyMMdd")+".xls");
            //获取内容的MD5
            string md5 = MD5Value("textFilePath.text");
            //获取文件的MD5加上密钥之后的新的MD5
            string newMD5 = GetMD5(md5+"tianwang");//文件的MD5加上密钥
            //流处理,将新的MD5值写入文本文件
            File.WriteAllText(@"c:\02" + DateTime.Now.ToString("yyyyMMdd") + ".text",newMD5);
            //上传文本文件到远程服务器
            fc.Upload(new FileInfo(@"c:\02" + DateTime.Now.ToString("yyyyMMdd") + ".text"), @"c:\02" + DateTime.Now.ToString("yyyyMMdd") + ".text");
        }
        /// <summary>
        /// 计算文件MD5值
        /// </summary>
        /// <param name="str">需要计算的文件路径</param>
        /// <returns>MD5值</returns>
        public static string MD5Value(String filepath)
        {
            MD5 md5 = new MD5CryptoServiceProvider();
            byte[] md5ch;
            using (FileStream fs = File.OpenRead(filepath))
            {
                md5ch = md5.ComputeHash(fs);
            }
            md5.Clear();
            string strMd5 = "";
            for (int i = 0; i < md5ch.Length - 1; i++)
            {
                strMd5 += md5ch[i].ToString("x").PadLeft(2, '0');
            }
            return strMd5;
        }
        /// <summary>
        /// 计算字符串的MD5
        /// </summary>
        /// <param name="sDataIn"></param>
        /// <returns></returns>
        public static string GetMD5(string sDataIn)
        {
            MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
            byte[] bytValue, bytHash;
            bytValue = System.Text.Encoding.UTF8.GetBytes(sDataIn);
            bytHash = md5.ComputeHash(bytValue);
            md5.Clear();
            string sTemp = "";
            for (int i = 0; i < bytHash.Length; i++)
            {
                sTemp += bytHash[i].ToString("X").PadLeft(2, '0');
            }
            return sTemp.ToLower();
        }

       

      

        /// 判断服务器上的文件是否被篡改,如果没有则读取
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button2_Click(object sender, EventArgs e)
        {
            //获取当前系统时间
            string datestr = DateTime.Now.ToString("yyyyMMdd");
            FtpClient fc = new FtpClient("127.0.0.1","test","123");
            //将服务器上个文件下载下来
            fc.Download("02" + datestr + ".xls", @"c:\02" + datestr + ".xls");

            //计算下载下来的xls文件的MD5值+密钥
            string md5 = MD5Value(@"c:\02" + datestr + ".xls");
            string newMD5 = GetMD5(md5 + "tianwang");

            //下载服务器上的保留的MD5txt文件MD5的值
            fc.Download("02" + datestr + ".txt", @"c:\t.text");
            string txt = File.ReadAllText(@"c:\t.txt");

            //检查文件是否被篡改
            if(txt!=newMD5)
            {
                MessageBox.Show("文件被篡改");
                return;
            }

            using(FileStream stream=File.OpenRead(@"c:\02.xls"))
            {
                HSSFWorkbook wb = new HSSFWorkbook(stream);
                HSSFSheet sheet = wb.GetSheetAt(0);
                MessageBox.Show(sheet.LastRowNum.ToString());
            }
        }

 

 

    }
}

 


















本文转自蓬莱仙羽51CTO博客,原文链接:http://blog.51cto.com/dingxiaowei/1366616,如需转载请自行联系原作者


相关实践学习
【AI破次元壁合照】少年白马醉春风,函数计算一键部署AI绘画平台
本次实验基于阿里云函数计算产品能力开发AI绘画平台,可让您实现“破次元壁”与角色合照,为角色换背景效果,用AI绘图技术绘出属于自己的少年江湖。
从 0 入门函数计算
在函数计算的架构中,开发者只需要编写业务代码,并监控业务运行情况就可以了。这将开发者从繁重的运维工作中解放出来,将精力投入到更有意义的开发任务上。
相关文章
|
4月前
|
存储 机器学习/深度学习 弹性计算
阿里云服务器ECS计算型c9i规格族性能与特点、配置性能参数表
阿里云ECS计算型c9i实例基于Intel® Xeon® Granite Rapids处理器,主频3.2GHz,全核睿频3.6GHz,提供稳定高性能计算能力。支持NVMe协议、vTPM安全加密,适用于机器学习、大数据分析、高性能计算等场景,具备高安全、低延迟、强扩展等优势。
|
4月前
|
人工智能 编解码 安全
阿里云服务器计算型c7、c8a、c8y、c8i、c9i实例区别及选型指南参考
在阿里云的活动中,属于计算型实例的通常有计算型c7、计算型c8a、计算型c8y、计算型c8i和计算型c9i这几个实例规格,不同实例规格在处理器架构、存储技术、网络协议、安全特性等性能并不是一样的,所以他们的适用场景也有所差异。本文为大家介绍计算型c7、c8a、c8y、c8i、c9i实例的性能、适用场景的区别以及选择参考。
|
5月前
|
机器学习/深度学习 存储 监控
内部文件审计:企业文件服务器审计对网络安全提升有哪些帮助?
企业文件服务器审计是保障信息安全、确保合规的关键措施。DataSecurity Plus 是由卓豪ManageEngine推出的审计工具,提供全面的文件访问监控、实时异常告警、用户行为分析及合规报告生成功能,助力企业防范数据泄露风险,满足GDPR、等保等多项合规要求,为企业的稳健发展保驾护航。
137 0
|
4月前
|
存储 机器学习/深度学习 编解码
阿里云服务器计算型c7/c8a/c8i/c8y/c9i实例性能、适用场景及价格对比与选择参考
阿里云服务器计算型c7、计算型c8a、计算型c8i、计算型c8y和计算型c9i同属于计算型实例,是目前计算型实例规格中的热门实例规格,通常在阿里云的活动中,计算型实例也主要以这几个实例规格为主,本文为大家介绍c7/c8a/c8i/c8y/c9i实例各自的实例性能、适用场景及价格对比,以供选择参考。
|
4月前
|
存储 机器学习/深度学习 缓存
阿里云九代云服务器怎么样?计算型c9i、通用型g9i、内存型r9i实例介绍
阿里云第9代云服务器主要实例规格包括计算型c9i、通用型g9i、内存型r9i,本文将为大家介绍阿里云九代云服务器中的计算型c9i、通用型g9i、内存型r9i实例的主要性能特点,并分享最新的活动价格信息,以供参考。
469 1
|
4月前
|
弹性计算
阿里云服务器ECS计算型c9i实例2核4G配置租用费用整理(多地域报价)
阿里云ECS计算型c9i实例(2核4G)北京地域租用价:0.3873元/小时,185元/月,1450元/年,2877元3年。支持按小时、包月或包年计费,实际购买可享折扣,如1年7.1折,3年4.6折。具体价格以官网为准
157 1
|
5月前
|
安全 Linux Shell
使用SCP命令在CentOS 7上向目标服务器传输文件
以上步骤是在CentOS 7系统上使用SCP命令进行文件传输的基础,操作简洁,易于理解。务必在执行命令前确认好各项参数,尤其是目录路径和文件名,以避免不必要的传输错误。
524 17
|
4月前
|
存储 弹性计算 网络协议
阿里云服务器ECS实例规格族详细介绍:计算型c9i、经济型e和通用算力u1实例CPU参数说明
阿里云ECS实例规格族包括计算型c9i、经济型e和通用算力型u1等,各自针对不同场景优化。不同规格族在CPU型号、主频、网络性能、云盘IOPS等方面存在差异,即使CPU内存相同,性能和价格也不同。
679 0
|
5月前
|
安全 Linux 网络安全
Python极速搭建局域网文件共享服务器:一行命令实现HTTPS安全传输
本文介绍如何利用Python的http.server模块,通过一行命令快速搭建支持HTTPS的安全文件下载服务器,无需第三方工具,3分钟部署,保障局域网文件共享的隐私与安全。
1023 0
|
2月前
|
弹性计算 运维 安全
阿里云轻量应用服务器与云服务器ECS啥区别?新手帮助教程
阿里云轻量应用服务器适合个人开发者搭建博客、测试环境等低流量场景,操作简单、成本低;ECS适用于企业级高负载业务,功能强大、灵活可扩展。二者在性能、网络、镜像及运维管理上差异显著,用户应根据实际需求选择。
236 10

热门文章

最新文章