zoukankan      html  css  js  c++  java
  • 使用DES对称加密代码,支持中文

    //名称空间
    using System;
    using System.Security.Cryptography;
    using System.IO;
    using System.Text;
    //方法
    //加密方法
    public string Encrypt(string pToEncrypt, string sKey)
    {
    DESCryptoServiceProvider des = new DESCryptoServiceProvider();
    //把字符串放到byte数组中
    //原来使用的UTF8编码,我改成Unicode编码了,不行
    byte[] inputByteArray = Encoding.Default.GetBytes(pToEncrypt);
    //byte[] inputByteArray=Encoding.Unicode.GetBytes(pToEncrypt);
    //建立加密对象的密钥和偏移量
    //原文使用ASCIIEncoding.ASCII方法的GetBytes方法
    //使得输入密码必须输入英文文本
    des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
    des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
    MemoryStream ms = new MemoryStream();
    CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(),CryptoStreamMode.Write);
    //Write the byte array into the crypto stream
    //(It will end up in the memory stream)
    cs.Write(inputByteArray, 0, inputByteArray.Length);
    cs.FlushFinalBlock();
    //Get the data back from the memory stream, and into a string
    StringBuilder ret = new StringBuilder();
    foreach(byte b in ms.ToArray())
    {
    //Format as hex
    ret.AppendFormat("{0:X2}", b);
    }
    ret.ToString();
    return ret.ToString();
    }
    //解密方法
    public string Decrypt(string pToDecrypt, string sKey)
    {
    DESCryptoServiceProvider des = new DESCryptoServiceProvider();
    //Put the input string into the byte array
    byte[] inputByteArray = new byte[pToDecrypt.Length / 2];
    for(int x = 0; x < pToDecrypt.Length / 2; x++)
    {
    int i = (Convert.ToInt32(pToDecrypt.Substring(x * 2, 2), 16));
    inputByteArray[x] = (byte)i;
    }
    //建立加密对象的密钥和偏移量,此值重要,不能修改
    des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
    des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
    MemoryStream ms = new MemoryStream();
    CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(),CryptoStreamMode.Write);
    //Flush the data through the crypto stream into the memory stream
    cs.Write(inputByteArray, 0, inputByteArray.Length);
    cs.FlushFinalBlock();
    //Get the decrypted data back from the memory stream
    //建立StringBuild对象,CreateDecrypt使用的是流对象,必须把解密后的文本变成流对象
    StringBuilder ret = new StringBuilder();
    return System.Text.Encoding.Default.GetString(ms.ToArray());
    }
    //-------代码完毕--------------------
    注意:sKey输入密码的时候,必须使用英文字符,区分大小写,且字符数量是8个,不能多也不能少,否则出错。
    本人使用Windows2000 Server .net Framework SP3 ,VS.net下在ASP.net下使用成功,加密解密正常!
    
  • 相关阅读:
    EntityFramework 启用迁移 EnableMigrations 报异常 "No context type was found in the assembly"
    JAVA 访问FTP服务器示例(2)
    NuGet Package Manager 更新错误解决办法
    JAVA 访问FTP服务器示例(1)
    RemoteAttribute 的使用问题
    诡异的 javascript 变量
    javascript apply用法
    Babun 中文乱码
    GSM呼叫过程
    转站博客园
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/1721650.html
Copyright © 2011-2022 走看看