教学服务系统

 找回密码
 立即注册
搜索
查看: 627|回复: 1

信息计算2019级2班30号余墨

[复制链接]

10

主题

17

帖子

88

积分

注册会员

Rank: 2

积分
88
发表于 2022-4-5 20:57:38 | 显示全部楼层 |阅读模式
第三次提交

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

10

主题

17

帖子

88

积分

注册会员

Rank: 2

积分
88
 楼主| 发表于 2022-4-5 22:47:44 | 显示全部楼层
using System;
using System.IO;
using System.Security;
using System.Security.Cryptography;
using System.Runtime.InteropServices;
using System.Text;
namespace ConsoleApp3
{
    class Class1
    {
        [System.Runtime.InteropServices.DllImport("KERNEL32.DLL", EntryPoint="RtlZeroMemory")]
        public static extern bool ZeroMemory(IntPtr Destination, int Length);
        static string GenerateKey()
        {
            DESCryptoServiceProvider desCrypto = (DESCryptoServiceProvider)DESCryptoServiceProvider.Create();
            return ASCIIEncoding.ASCII.GetString(desCrypto.Key);
        }
        static void EncryptFile(string sInputFilename,string sOutputFilename,string sKey)
        {
            FileStream fsInput = new FileStream(sInputFilename, FileMode.Open,FileAccess.Read);
            FileStream fsEncrypted = new FileStream(sOutputFilename, FileMode.Create, FileAccess.Write);
            DESCryptoServiceProvider DES = new DESCryptoServiceProvider();
            DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
            DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
            ICryptoTransform desencrypt = DES.CreateEncryptor();
            CryptoStream cryptostream = new CryptoStream(fsEncrypted, desencrypt, CryptoStreamMode.Write);
            byte[] bytearrayinput = new byte[fsInput.Length];
            fsInput.Read(bytearrayinput, 0, bytearrayinput.Length);
            cryptostream.Write(bytearrayinput, 0, bytearrayinput.Length);
            cryptostream.Close();
            fsInput.Close();
            fsEncrypted.Close();
        }
        static void DecryptFile(string sInputFilename,string sOutputFilename,string sKey)
        {
            DESCryptoServiceProvider DES = new DESCryptoServiceProvider();
            DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
            DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
            FileStream fsread = new FileStream(sInputFilename,FileMode.Open,FileAccess.Read);
            ICryptoTransform desdecrypt = DES.CreateDecryptor();
            CryptoStream cryptostreamDecr = new CryptoStream(fsread,desdecrypt,CryptoStreamMode.Read);
            StreamWriter fsDecrypted = new StreamWriter(sOutputFilename);
            fsDecrypted.Write(new StreamReader(cryptostreamDecr).ReadToEnd());
            fsDecrypted.Flush();
            fsDecrypted.Close();
        }
        static void Main()
        {
            string sSecretKey;
            sSecretKey = GenerateKey();
            GCHandle gch = GCHandle.Alloc(sSecretKey, GCHandleType.Pinned);
            EncryptFile("D:\\MyData.doc", "D:\\Encrypted.doc", sSecretKey);
            DecryptFile("D:\\Encrypted.doc", "D:\\Decrypted.doc", sSecretKey);
            ZeroMemory(gch.AddrOfPinnedObject(), sSecretKey.Length * 2);
            gch.Free();
        }
    }
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

教学服务系统

GMT+8, 2025-5-6 09:58 , Processed in 0.018979 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表