一个简单的密码管理器

PasswordsKeeper v1.0.0    简单的管理你的密码。

使用 json 进行数据的本地保存,无需安装任何插件。无网络功能,无需担心密码泄露。

加密类

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

namespace WindowsFormsApp1
{
    /************************************
     * 加密解密类
     * 包括对称密匙和MD5
     * 默认key为 freedomF
     * **********************/
    public static class Encrypt_Helper
    {
        public static string my_Key { get; } = "freedomF";
        /// <summary>
        /// 解密
        /// 密匙为 my_key
        /// </summary>
        /// <param name="encrypted">加密过的字节数组</param>
        /// <returns></returns>
        public static byte[] Decrypt(byte[] encrypted)
        {
            byte[] key = System.Text.Encoding.Default.GetBytes("freedomF");
            return Decrypt(encrypted, key);
        }
        /// <summary>
        /// 解密
        /// </summary>
        /// <param name="original">加密过的字符串</param>
        /// <param name="key">密匙字符串</param>
        /// <returns></returns>
        public static string Decrypt(string original, string key = "freedomF")
        {
            DESCryptoServiceProvider des = new DESCryptoServiceProvider();
            byte[] inputByteArray = new byte[original.Length / 2];
            for (int x = 0; x < original.Length / 2; x++)
            {
                int i = (Convert.ToInt32(original.Substring(x * 2, 2), 16));
                inputByteArray[x] = (byte)i;
            }
            des.Key = ASCIIEncoding.ASCII.GetBytes(key);
            des.IV = ASCIIEncoding.ASCII.GetBytes(key);
            MemoryStream ms = new MemoryStream();
            CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);
            cs.Write(inputByteArray, 0, inputByteArray.Length);
            cs.FlushFinalBlock();
            return System.Text.Encoding.Default.GetString(ms.ToArray());
        }
        /// <summary>
        /// 解密
        /// </summary>
        /// <param name="encrypted">加密过的字节数组</param>
        /// <param name="key">密匙的字节数组</param>
        /// <returns></returns>
        public static byte[] Decrypt(byte[] encrypted, byte[] key)
        {
            TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();
            des.Key = Make_MD5(key);
            des.Mode = CipherMode.ECB;
            return des.CreateDecryptor().TransformFinalBlock(encrypted, 0, encrypted.Length);
        }
        /// <summary>
        /// 加密
        /// 使用 my_key 作为密匙
        /// </summary>
        /// <param name="original">要加密的字节数组</param>
        /// <returns></returns>
        public static byte[] Encrypt(byte[] original)
        {
            byte[] key = System.Text.Encoding.Default.GetBytes("freedomF");
            return Encrypt(original, key);
        }
        /// <summary>
        /// 加密
        /// </summary>
        /// <param name="original">要加密的字节数组</param>
        /// <param name="key">密匙的字节数组</param>
        /// <returns></returns>
        public static byte[] Encrypt(byte[] original, byte[] key)
        {
            TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();
            des.Key = Make_MD5(key);
            des.Mode = CipherMode.ECB;
            return des.CreateEncryptor().TransformFinalBlock(original, 0, original.Length);
        }
        /// <summary>
        /// 加密
        /// </summary>
        /// <param name="str">要加密的字符串</param>
        /// <param name="key">密匙的字符串</param>
        /// <returns></returns>
        public static string Encrypt(string str, string key = "freedomF")
        {
            DESCryptoServiceProvider des = new DESCryptoServiceProvider();
            byte[] inputByteArray = Encoding.Default.GetBytes(str);
            des.Key = ASCIIEncoding.ASCII.GetBytes(key);
            des.IV = ASCIIEncoding.ASCII.GetBytes(key);
            MemoryStream ms = new MemoryStream();
            CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
            cs.Write(inputByteArray, 0, inputByteArray.Length);
            cs.FlushFinalBlock();
            var sb = new StringBuilder();
            foreach (byte b in ms.ToArray())
                sb.AppendFormat("{0:X2}", b);
            return sb.ToString();
        }
        public static byte[] Make_MD5(byte[] original)
        {
            MD5CryptoServiceProvider hashmd5 = new MD5CryptoServiceProvider();
            byte[] keyhash = hashmd5.ComputeHash(original);
            hashmd5 = null;
            return keyhash;
        }
        public static string MD5_Encrypt(string clearText)
        {
            string encryptedText = "";
            MD5_Encrypt(clearText, ref encryptedText);
            return encryptedText;
        }
        public static void MD5_Encrypt(string clearText, ref string encryptedText)
        {
            encryptedText = "";
            try
            {
                if (clearText == null)
                {
                    clearText = "";
                }
                MD5CryptoServiceProvider o_MD5 = new MD5CryptoServiceProvider();
                byte[] bytesEncrypt = System.Text.Encoding.Default.GetBytes(clearText);
                byte[] bytesEncrypted = o_MD5.ComputeHash(bytesEncrypt, 0, bytesEncrypt.Length);
                for (int i = 0; i < bytesEncrypted.Length; i++)
                {
                    encryptedText += bytesEncrypted[i].ToString("x").PadLeft(2, '0');
                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }

    }
}
文件读取类
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace WindowsFormsApp1
{
   public class FileRwTer
    {
        public static UserInfo GetUserInfo(string username)
        {
            if(File.Exists("Data\\" + username+".userinfo"))
            {
                var b = File.ReadAllBytes("Data\\"+username + ".userinfo");
                b = Encrypt_Helper.Decrypt(b);
                var a = Encoding.UTF8.GetString(b);
                return   Newtonsoft.Json.JsonConvert.DeserializeObject<UserInfo>(a);
            }
            else
            {
                return null;
            }
        }
        public static void WriteInfo(UserInfo info)
        {
            var b= Newtonsoft.Json.JsonConvert.SerializeObject(info);
            var a = Encoding.UTF8.GetBytes(b);
            a = Encrypt_Helper.Encrypt(a);
            File.WriteAllBytes("Data\\"+info.User + ".userinfo", a);
        }

        public static bool ContainsUser(string username)
        {
            return File.Exists("Data\\" + username + ".userinfo");
        }
    }
}

面向对象


using System.Collections.Generic;

namespace WindowsFormsApp1
{
    public class UserInfo
    {
        public SercureQuestion[] Sercure;
        public string User;
        public string Password;
        public List<PassWordInfo> Passwords;
    }
}


passwordinfo

using System;

namespace WindowsFormsApp1
{
    public class PassWordInfo
    {
        public string Name;
        public string Passwords;
        public string Description;
        public DateTime LastModifyDate;
    }
}









下载地址

猜你喜欢

转载自blog.csdn.net/qq_34831192/article/details/80858869