• PBE加密 .net 实现


    using System;
    using System.Security.Cryptography;
    using System.Text;
    
    namespace Demo
    {
        internal class PKCSKeyGenerator
        {
            byte[] key = new byte[8], iv = new byte[8];
            DESCryptoServiceProvider des = new DESCryptoServiceProvider();
            public byte[] Key { get { return key; } }
            public byte[] IV { get { return iv; } }
            public ICryptoTransform Encryptor { get { return des.CreateEncryptor(key, iv); } }
            public ICryptoTransform Decryptor { get { return des.CreateDecryptor(key, iv); } }
            public PKCSKeyGenerator() { }
            public PKCSKeyGenerator(String keystring, byte[] salt, int md5iterations, int segments)
            {
                Generate(keystring, salt, md5iterations, segments);
            }
            public ICryptoTransform Generate(String keystring, byte[] salt, int md5iterations, int segments)
            {
                int HASHLENGTH = 16;
                byte[] keymaterial = new byte[HASHLENGTH * segments];
                byte[] psbytes;
                psbytes = Encoding.UTF8.GetBytes(keystring);
                byte[] data00 = new byte[psbytes.Length + salt.Length];
                Array.Copy(psbytes, data00, psbytes.Length);
                Array.Copy(salt, 0, data00, psbytes.Length, salt.Length);
                MD5 md5 = new MD5CryptoServiceProvider();
                byte[] result = null;
                byte[] hashtarget = new byte[HASHLENGTH + data00.Length];
    
                for (int j = 0; j < segments; j++)
                {
                    if (j == 0)
                    {
                        result = data00;
                    }
                    else
                    {
                        Array.Copy(result, hashtarget, result.Length);
                        Array.Copy(data00, 0, hashtarget, result.Length, data00.Length);
                        result = hashtarget;
                    }
                    for (int i = 0; i < md5iterations; i++)
                    {
                        result = md5.ComputeHash(result);
                    }
                    Array.Copy(result, 0, keymaterial, j * HASHLENGTH, result.Length);
                }
                Array.Copy(keymaterial, 0, key, 0, 8);
                Array.Copy(keymaterial, 8, iv, 0, 8);
                return Encryptor;
            }
        }
    }
    View Code
    using System;
    using System.Collections.Generic;
    using System.Text;
    
    namespace Demo
    {
        /// <summary>
        /// PBE加密
        /// </summary>
        public class PBE
        {
            /// <summary>
            /// 根据密码密钥和干扰盐值得到加密后的密文
            /// </summary>
            /// <param name="passWord">密码</param>
            /// <param name="passWordKey">加密key</param>
            /// <param name="salt">干扰盐</param>
            /// <returns></returns>
            public static String Encryption(String passWord, String passWordKey, string salt="00000000")
            {
                int count = 1000; 
                PKCSKeyGenerator cipher = new PKCSKeyGenerator(passWordKey, Encoding.UTF8.GetBytes(salt), count, 1);
                byte[] src = Encoding.UTF8.GetBytes(passWord);
                byte[] result = cipher.Encryptor.TransformFinalBlock(src, 0, src.Length);
                string ret = "";
                for (int i = 0; i < result.Length; i++)
                {
                    ret += Convert.ToString(result[i], 16).PadLeft(2, '0');
                }
                return ret;
            }
        }
    }
  • 相关阅读:
    [UVA 10603]Fill
    [BZOJ 4152][AMPPZ 2014]The Captain
    P4779单源最短路径(标准版)
    P3372 线段树模版1
    P1776宝物筛选
    最长上升子序列模版
    01背包问题
    SHOI2008 汉诺塔
    log P1080国王游戏
    最小生成树模版 Kruskal
  • 原文地址:https://www.cnblogs.com/zzfstudy/p/11763227.html
Copyright © 2020-2023  润新知