MD5数据加密&AES数据加密&DES数据加密

MD5数据加密

1.MD5概述:
MD5是一种数据加密的算法,可以用于数据的加密,文件快传,文件校验,数据压缩等方面。
MD5还被称之为数据摘要算法,或数据指纹算法。
特点:

  1. 经过加密后的数据,是不能被破解的,无法得到原有的明文内容。
  2. 经过加密的数据,都是128位2进制数据组成。通常会把它书写成32位16进制数据。
  3. 任何形式的数据,经过加密之后,都会变为二进制数据,长度为32位16进制数据。
  4. 同一份数据经过md5加密之后,一定会得到同一个结果

MD5数据加密 - xieyj - 博客园 (cnblogs.com)

小宅博客网(33、MD5数据加密) (bilibili996.com)

AES加密

AES是一个对称密码,旨在取代DES成为广泛使用的标准。

高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法(微信小程序加密传输就是用这个加密算法的)。对称加密算法也就是加密和解密用相同的密钥。

AES为分组密码,分组密码也就是把明文分成一组一组的,每组长度相等,每次加密一组数据,直到加密完整个明文。在AES标准规范中,分组长度只能是128位,也就是说,每个分组为16个字节(每个字节8位)。密钥的长度可以使用128位、192位或256位。密钥的长度不同,推荐加密轮数也不同。

(2条消息) AES加密算法的详细介绍与实现_TimeShatter的博客-CSDN博客_aes加密

AES加密 - block2016 - 博客园 (cnblogs.com)

小宅博客网(8、AES数据加密与解密) (bilibili996.com)

/// <summary>
        /// 加密
        /// </summary>
        /// <param name="encryptString">待加密字符串</param>
        /// <returns></returns>
        public static string EncryptAES(string encryptString)
        {
            byte[] key = new byte[16]; // 秘钥长度一定要是16个字节

            string filename = "../txt.key";
            byte[] ikey = File.ReadAllBytes(filename);
            for (int k = 0; k < ikey.Length && k < key.Length; k++) key[k] = ikey[k];

            byte[] txt = System.Text.Encoding.Default.GetBytes(encryptString);
            byte[] data = new byte[2048];
            for (int k = 0; k < txt.Length; k++) data[k] = txt[k];
            string encrypt = null;
            Rijndael aes = Rijndael.Create();
            using (MemoryStream mStream = new MemoryStream())
            {
                using (CryptoStream cStream = new CryptoStream(mStream, aes.CreateEncryptor(key, ikey), CryptoStreamMode.Write))
                {
                    cStream.Write(data, 0, data.Length);
                    cStream.FlushFinalBlock();
                    encrypt = Convert.ToBase64String(mStream.ToArray());
                }
            }
            aes.Clear();
            return encrypt;
        }
        /// <summary>
        /// 解密
        /// </summary>
        /// <param name="encryptString">待解密字符串</param>
        /// <returns></returns>
        public static string DecryptAES(string encryptString)
        {
            //byte[] bKey = Encoding.UTF8.GetBytes(Key);
            //byte[] bIV = Encoding.UTF8.GetBytes(IV);
            byte[] key = new byte[16]; // 秘钥长度一定要是16个字节
            string filename = "../txt.key";
            byte[] ikey = File.ReadAllBytes(filename);
            for (int k = 0; k < ikey.Length && k < key.Length; k++) key[k] = ikey[k];
            byte[] byteArray = Convert.FromBase64String(encryptString);

            string decrypt = null;
            Rijndael aes = Rijndael.Create();
            using (MemoryStream mStream = new MemoryStream())
            {
                using (CryptoStream cStream = new CryptoStream(mStream, aes.CreateDecryptor(key, ikey), CryptoStreamMode.Write))
                {
                    cStream.Write(byteArray, 0, byteArray.Length);
                    cStream.FlushFinalBlock();
                    decrypt = Encoding.UTF8.GetString(mStream.ToArray());
                }
            }
            aes.Clear();
            return decrypt;
        }

 另一种方式

        /// <summary>
        /// 加密
        /// </summary>
        /// <param name="str"></param>
        /// <param name="Key"></param>
        /// <returns></returns>
        public static string EncryptAES2(string str, byte[] Key)
        {
            MemoryStream mStream = new MemoryStream();
            byte[] plainBytes = Encoding.GetEncoding("UTF-8").GetBytes(str);
            //byte[] bKey = HexStr2Byte(Key);   //将十六进制字符串解码为byte[]
            RijndaelManaged aes = new RijndaelManaged //访问Rigndael算法的托管版本,并设置对称算法的密钥、模式、填充模式
            {
                Mode = CipherMode.ECB,
                Padding = PaddingMode.PKCS7,
                KeySize = 128,
                Key = Key
            };
            CryptoStream cryptoStream = new CryptoStream(mStream, aes.CreateEncryptor(), CryptoStreamMode.Write);
            try
            {
                cryptoStream.Write(plainBytes, 0, plainBytes.Length);
                cryptoStream.FlushFinalBlock();
                return Convert.ToBase64String(mStream.ToArray());
            }
            finally
            {
                cryptoStream.Close();
                mStream.Close();
                aes.Clear();
            }
        }
        /// <summary>
        /// 解密
        /// </summary>
        /// <param name="str"></param>
        /// <param name="Key"></param>
        /// <returns></returns>
        public static string DecryptAES2(string str, byte[] Key)
        {
            MemoryStream mStream = new MemoryStream();
            byte[] plainBytes = Convert.FromBase64String(str);
            //byte[] bKey = HexStr2Byte(Key);   //将十六进制字符串解码为byte[]
            RijndaelManaged aes = new RijndaelManaged
            {
                Mode = CipherMode.ECB,
                Padding = PaddingMode.PKCS7,
                KeySize = 128,
                Key = Key
            };
            CryptoStream cryptoStream = new CryptoStream(mStream, aes.CreateDecryptor(), CryptoStreamMode.Write);
            try
            {
                cryptoStream.Write(plainBytes, 0, plainBytes.Length);
                cryptoStream.FlushFinalBlock();
                return Encoding.UTF8.GetString(mStream.ToArray());
            }
            finally
            {
                cryptoStream.Close();
                mStream.Close();
                aes.Clear();
            }
        }

Base64编码,去掉等号特殊字符

(8条消息) Base64编码,去掉等号特殊字符_企业级技术与网站app运营-CSDN博客_base64编码特殊字符

/// <summary>自定义包含指定字符的base64工具</summary>
    internal static class Base64Helper
    {
        static readonly string base64Table = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-";
        static readonly int[] base64Index = new int[]
        {
            -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
            -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
            -1,63,-1,-1,52,53,54,55,56,57,58,59,60,61,-1,-1,-1,-1,-1,-1,-1,0,1,
            2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,-1,
            -1,-1,-1,62,-1,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,
            43,44,45,46,47,48,49,50,51,-1,-1,-1,-1,-1,-1
        };
        public static byte[] FromBase64String(string inData)
        {
            int inDataLength = inData.Length;
            int lengthmod4 = inDataLength % 4;
            int calcLength = (inDataLength - lengthmod4);
            byte[] outData = new byte[inDataLength / 4 * 3 + 3];
            int j = 0;
            int i;
            int num1, num2, num3, num4;
 
            for (i = 0; i < calcLength; i += 4, j += 3)
            {
                num1 = base64Index[inData[i]];
                num2 = base64Index[inData[i + 1]];
                num3 = base64Index[inData[i + 2]];
                num4 = base64Index[inData[i + 3]];
 
                outData[j] = (byte)((num1 << 2) | (num2 >> 4));
                outData[j + 1] = (byte)(((num2 << 4) & 0xf0) | (num3 >> 2));
                outData[j + 2] = (byte)(((num3 << 6) & 0xc0) | (num4 & 0x3f));
            }
            i = calcLength;
            switch (lengthmod4)
            {
                case 3:
                    num1 = base64Index[inData[i]];
                    num2 = base64Index[inData[i + 1]];
                    num3 = base64Index[inData[i + 2]];
 
                    outData[j] = (byte)((num1 << 2) | (num2 >> 4));
                    outData[j + 1] = (byte)(((num2 << 4) & 0xf0) | (num3 >> 2));
                    j += 2;
                    break;
                case 2:
                    num1 = base64Index[inData[i]];
                    num2 = base64Index[inData[i + 1]];
 
                    outData[j] = (byte)((num1 << 2) | (num2 >> 4));
                    j += 1;
                    break;
            }
            Array.Resize(ref outData, j);
            return outData;
        }
        public static string ToBase64String(byte[] inData)
        {
            int inDataLength = inData.Length;
            int outDataLength = (int)(inDataLength / 3 * 4) + 4;
            char[] outData = new char[outDataLength];
 
            int lengthmod3 = inDataLength % 3;
            int calcLength = (inDataLength - lengthmod3);
            int j = 0;
            int i;
 
            for (i = 0; i < calcLength; i += 3, j += 4)
            {
                outData[j] = base64Table[inData[i] >> 2];
                outData[j + 1] = base64Table[((inData[i] & 0x03) << 4) | (inData[i + 1] >> 4)];
                outData[j + 2] = base64Table[((inData[i + 1] & 0x0f) << 2) | (inData[i + 2] >> 6)];
                outData[j + 3] = base64Table[(inData[i + 2] & 0x3f)];
            }
 
            i = calcLength;
            switch (lengthmod3)
            {
                case 2:
                    outData[j] = base64Table[inData[i] >> 2];
                    outData[j + 1] = base64Table[((inData[i] & 0x03) << 4) | (inData[i + 1] >> 4)];
                    outData[j + 2] = base64Table[(inData[i + 1] & 0x0f) << 2];
                    j += 3;
                    break;
                case 1:
                    outData[j] = base64Table[inData[i] >> 2];
                    outData[j + 1] = base64Table[(inData[i] & 0x03) << 4];
                    j += 2;
                    break;
            }
            return new string(outData, 0, j);
        }
        public static string Base64Encode(string source)
        {
            byte[] barray = Encoding.Default.GetBytes(source);
            return Base64Helper.ToBase64String(barray);
        }
        public static string Base64Decode(string source)
        {
            byte[] barray = Base64Helper.FromBase64String(source);
            return Encoding.Default.GetString(barray);
        }
    }

 

DES数据加密

小宅博客网(34、DES数据加密与解密) (bilibili996.com)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
DES(Data Encryption Standard)是一种对称密钥加密算法,它使用 64 位密钥数据进行加密和解密。它的加密过程包括初始置换、16 轮 Feistel 网络、逆置换等步骤,解密过程则是加密过程的逆过程。DES密钥长度较短,易受到暴力破解的攻击,已经逐渐被 AES 所取代。 AES(Advanced Encryption Standard)也是一种对称密钥加密算法,它使用的密钥长度为 128 位、192 位或 256 位。AES加密过程包括字节代换、行移位、列混淆和轮密钥加等步骤,解密过程则是加密过程的逆过程。AES加密强度较高,安全性更好,目前已经成为最流行的加密算法之一。 实现 DESAES 加密解密需要使用相应的加密库,比如 OpenSSL、Cryptopp 等。以下是使用 OpenSSL 库实现 DESAES 加密解密的示例代码(仅供参考): DES 加密解密示例: ```c #include <openssl/des.h> int encrypt_DES(unsigned char *plaintext, int plaintext_len, unsigned char *key, unsigned char *ciphertext) { DES_key_schedule des_key_schedule; DES_set_key((C_Block *)key, &des_key_schedule); DES_ecb_encrypt((C_Block *)plaintext, (C_Block *)ciphertext, &des_key_schedule, DES_ENCRYPT); return ciphertext_len; } int decrypt_DES(unsigned char *ciphertext, int ciphertext_len, unsigned char *key, unsigned char *plaintext) { DES_key_schedule des_key_schedule; DES_set_key((C_Block *)key, &des_key_schedule); DES_ecb_encrypt((C_Block *)ciphertext, (C_Block *)plaintext, &des_key_schedule, DES_DECRYPT); return plaintext_len; } ``` AES 加密解密示例: ```c #include <openssl/aes.h> int encrypt_AES(unsigned char *plaintext, int plaintext_len, unsigned char *key, unsigned char *ciphertext) { AES_KEY aes_key; AES_set_encrypt_key(key, 128, &aes_key); AES_encrypt(plaintext, ciphertext, &aes_key); return ciphertext_len; } int decrypt_AES(unsigned char *ciphertext, int ciphertext_len, unsigned char *key, unsigned char *plaintext) { AES_KEY aes_key; AES_set_decrypt_key(key, 128, &aes_key); AES_decrypt(ciphertext, plaintext, &aes_key); return plaintext_len; } ``` 这些示例代码仅供参考,实际应用中需要根据具体需求进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值