PBE加密 .net 实现
阅读原文时间:2023年07月11日阅读:2

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

namespace Demo
{
internal class PKCSKeyGenerator
{
byte[] key = new byte[], iv = new byte[];
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 = ;
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, , data00, psbytes.Length, salt.Length);
MD5 md5 = new MD5CryptoServiceProvider();
byte[] result = null;
byte[] hashtarget = new byte[HASHLENGTH + data00.Length];

        for (int j = ; j < segments; j++)  
        {  
            if (j == )  
            {  
                result = data00;  
            }  
            else  
            {  
                Array.Copy(result, hashtarget, result.Length);  
                Array.Copy(data00, , hashtarget, result.Length, data00.Length);  
                result = hashtarget;  
            }  
            for (int i = ; i < md5iterations; i++)  
            {  
                result = md5.ComputeHash(result);  
            }  
            Array.Copy(result, , keymaterial, j \* HASHLENGTH, result.Length);  
        }  
        Array.Copy(keymaterial, , key, , );  
        Array.Copy(keymaterial, , iv, , );  
        return Encryptor;  
    }  
}  

}

using System;
using System.Collections.Generic;
using System.Text;

namespace Demo
{
///

/// PBE加密 ///
public class PBE
{
/// /// 根据密码密钥和干扰盐值得到加密后的密文 ///
/// 密码
/// 加密key
/// 干扰盐
///
public static String Encryption(String passWord, String passWordKey, string salt="")
{
int count = ;
PKCSKeyGenerator cipher = new PKCSKeyGenerator(passWordKey, Encoding.UTF8.GetBytes(salt), count, );
byte[] src = Encoding.UTF8.GetBytes(passWord);
byte[] result = cipher.Encryptor.TransformFinalBlock(src, , src.Length);
string ret = "";
for (int i = ; i < result.Length; i++)
{
ret += Convert.ToString(result[i], ).PadLeft(, '');
}
return ret;
}
}
}

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器