C# DES加密类,16位的加密。

这个加密类是与java写的DES加密不同时,自己写的,最后与Java的加密相同了,解决了加密后不同的问题。

可以直接调用里面的加密和解密的方法。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

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

namespace EallNum.Helper
{

    public class FI_DesTools
    {
        private FI_DesTools()
        {
        } 

        private static string key = "×××××"; 

        /// <summary>
        /// 对称加密解密的密钥
        /// </summary>
        public static string Key
        {
            get
            {
                return key;
            }
            set
            {
                key = value;
            }
        } 

        /// <summary>
        /// DES加密
        /// </summary>
        /// <param name="encryptString"></param>
        /// <returns></returns>
        public static string DesEncrypt(string strEncryptString)
        {
            StringBuilder strRetValue = new StringBuilder();

            try
            {
                byte[] keyBytes = Encoding.UTF8.GetBytes(key.Substring(0, 8));
                byte[] keyIV = keyBytes;
                byte[] inputByteArray = Encoding.UTF8.GetBytes(strEncryptString);
                DESCryptoServiceProvider provider = new DESCryptoServiceProvider();

                provider.Mode = CipherMode.ECB;//兼容其他语言的Des加密算法
                provider.Padding = PaddingMode.Zeros;//自动补0

                MemoryStream mStream = new MemoryStream();
                CryptoStream cStream = new CryptoStream(mStream, provider.CreateEncryptor(keyBytes, keyIV), CryptoStreamMode.Write);
                cStream.Write(inputByteArray, 0, inputByteArray.Length);
                cStream.FlushFinalBlock(); 

                //不使用base64编码
                //return Convert.ToBase64String(mStream.ToArray()); 

                //组织成16进制字符串
                foreach (byte b in mStream.ToArray())
                {
                    strRetValue.AppendFormat("{0:X2}", b);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }

            return strRetValue.ToString();
        } 

        /// <summary>
        /// DES解密
        /// </summary>
        /// <param name="decryptString"></param>
        /// <returns></returns>
        public static string DesDecrypt(string strDecryptString)
        {
            string strRetValue = "";

            try
            {
                byte[] keyBytes = Encoding.UTF8.GetBytes(key.Substring(0, 8));
                byte[] keyIV = keyBytes;

                //不使用base64解码
                //byte[] inputByteArray = Convert.FromBase64String(decryptString);

                //16进制转换为byte字节
                byte[] inputByteArray = new byte[strDecryptString.Length / 2];
                for (int x = 0; x < strDecryptString.Length / 2; x++)
                {
                    int i = (Convert.ToInt32(strDecryptString.Substring(x * 2, 2), 16));
                    inputByteArray[x] = (byte)i;
                }

                DESCryptoServiceProvider provider = new DESCryptoServiceProvider();

                provider.Mode = CipherMode.ECB;//兼容其他语言的Des加密算法
                provider.Padding = PaddingMode.Zeros;//自动补0  

                MemoryStream mStream = new MemoryStream();
                CryptoStream cStream = new CryptoStream(mStream, provider.CreateDecryptor(keyBytes, keyIV), CryptoStreamMode.Write);
                cStream.Write(inputByteArray, 0, inputByteArray.Length);
                cStream.FlushFinalBlock();

                //需要去掉结尾的null字符
                //strRetValue = Encoding.UTF8.GetString(mStream.ToArray());
                strRetValue = Encoding.UTF8.GetString(mStream.ToArray()).TrimEnd(‘\0‘);
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }

            return strRetValue;
        }
    }
}
时间: 2024-08-05 19:02:27

C# DES加密类,16位的加密。的相关文章

16位的MD5加密和32位MD5加密的区别

16位的MD5加密和32位MD5加密的区别 MD5加密后所得到的通常是32位的编码,而在不少地方会用到16位的编码它们有什么区别呢?16位加密就是从32位MD5散列中把中间16位提取出来!其实破解16位MD5散列要比破解32位MD5散列还慢因为他多了一个步骤,就是使用32位加密后再把中间16位提取出来, 然后再进行对比而破解32位的则不需要,加密后直接对比就可以了 admin 的加密代码:16位加密:7a57a5a743894a0e32位加密:21232f297a57a5a743894a0e4a

C# 字符串md5加密成16位和32位

#region md5加密 /// <summary> /// MD5 16位加密 加密后密码为小写 /// </summary> /// <param name="ConvertString"></param> /// <returns></returns> private string GetMd5Str16(string ConvertString) { try { using (MD5CryptoServi

Java实现MD5(32/16位)大小写加密

MD5简单介绍 大家都知道,地球上任何人都有自己独一无二的指纹,这常常成为公安机关鉴别罪犯身份最值得信赖的方法:与之类似,MD5就可以为任何文件(不管其大小.格式.数量)产生一个同样独一无二的"数字指纹",如果任何人对文件名做了任何改动,其MD5值也就是对应的"数字指纹"都会发生变化.MD5还广泛用于操作系统的登陆认证上,如Unix.各类BSD系统登录密码.数字签名等诸多方.如在UNIX系统中用户的密码是以MD5(或其它类似的算法)经Hash运算后存储在文件系统中.

ios 关于MD5 加密的32位与16位

在IOS开发过程中,为了保证数据的安全,我们通常要采取一些加密方法,常见的加密有Base64加密和MD5加密.Base64加密是可逆的,MD5加密目前来说一般是不可逆的.我们在开发一款App过程中,对于发的请求,其中有个“sign”的字段,这个key对应的value是MD5加密的字段,旁边的安卓同事问php后台,说MD5加密是32位的还是16位的,由于以前未曾注意过,所以就搜索了下,现在稍微总结下: MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传

php实现MD5加密16位(不要默认的32位)

使用substr函数截取: substr(md5("admin"),8,16); // 16位MD5加密 md5("admin"); // 32位MD5加密

PHP返回32位与16位的md5加密值

字符串"123456",经过md5算法加密之后是 32位: e10adc3949ba59abbe56e057f20f883e16位: 49ba59abbe56e057 PHP自带的 md5() 函数,产生的是32位字符串.至于16位的md5加密,可用如下代码实现: /** * 返回16位md5值 * * @param string $str 字符串 * @return string $str 返回16位的字符串 */ function short_md5($str) { return

Des加密类

需要导入Base64.jar包 import java.io.IOException; import java.security.SecureRandom; import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESKeySpec; import Decoder.BASE64Decoder; import

易语言-MD5加密16位和32位方法

取数据摘要 (到字节集 (文本))  这个取到的是32位的  取文本中间 (取数据摘要 (到字节集 (文本)), 9, 16)  这个取到的是16位的 原文地址:https://www.cnblogs.com/hongyuyingxiao/p/9630544.html

各种加密解密函数(URL加密解密、sha1加密解密、des加密解密)

普通hash函数如md5.sha1.base64等都是不可逆函数.虽然我们利用php可以利用这些函数写出可逆函数来.但是跨语言时这类可逆函数非常难搞定.所以这时尽量使用AES DES RC4 Rabbit TripleDes这些方法. 包含超时的加密解密函数 1 /** 2 * 加密 3 * @param string $string 要加密或解密的字符串 4 * @param string $operation 加密 '' 解密 DECODE 5 * @param string $key 密钥