Des加解密算法

class DesHelper
    {

/// <summary>
        /// DES加密方法
        /// </summary>
        /// <param name="prestr">待加密的字符串</param>
        /// <param name="key">加密的密码(只能为8位长)</param>
        /// <param name="encoding">编码方式(默认为UTF-8)</param>
        /// <returns>加密结果</returns>
        public static string Encrypt(string prestr, string key, Encoding encoding = null)
        {
            encoding = encoding ?? Encoding.GetEncoding("UTF-8");
            //注意iv的长度,必须和key中的密码长度相同
            var iv = Encoding.ASCII.GetBytes(key);
            var keyArray = Encoding.ASCII.GetBytes(key);
            var datas = encoding.GetBytes(prestr);
            var desCryptoServiceProvider = new DESCryptoServiceProvider();
            using (var memoryStream = new MemoryStream())
            {
                using (var cryptoStream = new CryptoStream(memoryStream, desCryptoServiceProvider.CreateEncryptor(iv, keyArray), CryptoStreamMode.Write))
                {
                    cryptoStream.Write(datas, 0, datas.Length);
                    cryptoStream.FlushFinalBlock();

StringBuilder ret = new StringBuilder();
                    foreach (byte b in memoryStream.ToArray())
                    {
                        ret.AppendFormat("{0:X2}", b);//十六进制编码
                    }
                    return ret.ToString();
                }
            }
        }

/// <summary>
        /// DES 解密方法
        /// </summary>
        /// <param name="prestr">待加密的字符串</param>
        /// <param name="key">加密的密码(只能为8位长)</param>
        /// <param name="encoding">编码方式(默认为UTF-8)</param>
        /// <returns>加密之结果</returns>
        public static string Decrypt(string prestr, string key, Encoding encoding = null)
        {
            encoding = encoding ?? Encoding.GetEncoding("UTF-8");
            var iv = Encoding.ASCII.GetBytes(key);
            var keyArray = Encoding.ASCII.GetBytes(key);
            //把字符串放到byte数组中
            byte[] datas = new byte[prestr.Length / 2];
            for (int x = 0; x < prestr.Length / 2; x++)
            {
                int i = (Convert.ToInt32(prestr.Substring(x * 2, 2), 16));
                datas[x] = (byte)i;
            }
            var desCryptoServiceProvider = new DESCryptoServiceProvider();
            using (var memoryStream = new MemoryStream())
            {
                using (var cryptoStream = new CryptoStream(memoryStream, desCryptoServiceProvider.CreateDecryptor(iv, keyArray), CryptoStreamMode.Write))
                {
                    cryptoStream.Write(datas, 0, datas.Length);
                    cryptoStream.FlushFinalBlock();
                    return encoding.GetString(memoryStream.ToArray());
                }
            }
        }
    }

时间: 2024-08-28 19:53:15

Des加解密算法的相关文章

DES加解密算法Qt实现

算法解密qt加密table64bit [声明] (1) 本文源码 大部分源码来自:DES算法代码.在此基础上,利用Qt编程进行了改写,实现了DES加解密算法,并添加了文件加解密功能.在此对署名为bengold1979的网友表示感谢!本文是对DES算法代码一文代码的具体描述.该源码仅供学习交流,请勿用于商业目的. (2) 图片及描述 图片及部分解析来自 http://zh.wikipedia.org/wiki/%E8%B3%87%E6%96%99%E5%8A%A0%E5%AF%86%E6%A8%9

JavaScript与C#互通的DES加解密算法

原文地址:传送门 本文提供了一个能使JavaScript与C#互通的DES加解密算法的实现,在前台页面中用JavaScript版本的DES算法将数据加密之后,传到服务器端,在服务器端可用C#版本的DES解密算法将其解密,得到原始数据,以起到一定的保密作用.但基于算法本身和密钥保密程度方面的考虑,使用本算法加密后的数据,其保密程度不是很高,故请酌情使用. 声明:本文中的JavaScript版的DES加解密算法来自于互联网,但为了方便于转化成C#版本的代码,本人对其进行了细微调整. JavaScri

DES加解密算法的简单实现

前几天刚写完一个简单的DES算法的实验,拿来作为第一次发到博客的随笔,填充一下空空如也的博客,献丑了 因为主要目的是Easy-To-Understand,再现一个直观的DES加解密的过程,所以很浪费地每一个数据位都用一个short整型存储,用来理ying解fu过zuo程ye就好(虽说DES这种对称加密算法十多年前就已经被淘汰了,现在一般建议用AES或者DES3 “1973 年,美国国家标准局(NBS)开始征集一种标准的数据加密标准算法(DES),以用于非机密性政府机构.商业部门和民间的对非机密的

实现与JS相同的Des加解密算法【转】

Java代码 import java.util.ArrayList; import java.util.List; /** * DES加密/解密 * * @Copyright Copyright (c) 2015 * @author liuyazhuang * @see DESCore */ public class Des { public Des() { } public static void main(String[] args) { Des desObj = new Des(); St

DES加密解密算法

DES加密解密算法 // 仿射变换加解密.cpp : 定义控制台应用程序的入口点. // #include <stdio.h> #include <conio.h> static char key[10], key_a[5], code[8], key_b[5], temp[10], key_aa[8], key_bb[8], l[4], r[4], l_a[4], r_a[4], V[8] = { 0, 1, 0, 1, 0, 1, 0, 1 }, b[8]; char Code

加解密算法

加解密算法概述 工作中经常用到加解密算法大概有以下三种: 单项散列算法 对称散列算法 非对称散列算法 单项散列算法 由不定长的数据转化为固定长的字符串,代表有: sha1 sha1($str[,raw_out=false]);//算法不够复杂 raw_out默认为false,生成一个32位的加密串 如果为true,则生成一个16位的二进制流 md5 md5($str[,strict=false]) strict默认为false,生成一个32位的加密串 如果为true,则生成一个16位的二进制流

多语言(Java&amp;C#&amp;Ruby&amp;C++&amp;Objective-C&amp;Android)互通的TripleDES加解密算法实现

直入主题:前段时间根据公司对开发API的安全性要求,采用了小数据加密验证的方式,根据需求采用了三重DES加密算法.在实施的过程中发现各个语言之间加密由于加密补位的方式有所不同,导致不同语言之间加密之后无法相互解析.在强大的会联网技术和公司其他同事的支持下,最终整合了集Java,C#,Ruby,C++,Objective-C,Android多语言的可以互通的TripleDES加密算法,虽然在AES加密推崇的今天DES有些乏力,但小可大胆贴上代码,希望能给大家提供一些思路. Java DES加密(J

Node.js的DES加解密和MD5加密

最基本的就是经常用的md5加密算法 代码如下 var  MD5=function (data) {       var _encrymd5 = require('crypto').createHash('md5');      var Buffer = require("buffer").Buffer;  //解决中文不一致的BUG    var buf = new Buffer(data);    var str = buf.toString("binary");

【转】各种加解密算法比较

转自: http://blog.csdn.net/pengzp/article/details/6556674 二.          加密算法介绍 对称加密算法 对称加密算法用来对敏感数据等信息进行加密,常用的算法包括: DES(Data Encryption Standard):数据加密标准,速度较快,适用于加密大量数据的场合. 3DES(Triple DES):是基于DES,对一块数据用三个不同的密钥进行三次加密,强度更高. AES(Advanced Encryption Standard