C# DES加密,KEY和IV不同设置的写法
1、KEY和IV分别赋值
//默认密钥向量
private static byte[] Iv= { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };
/// <summary>
/// DES加密字符串
/// </summary>
/// <param name="encryptString">待加密的字符串</param>
/// <param name="encryptKey">加密密钥,要求为8位</param>
/// <returns>加密成功返回加密后的字符串,失败返回源串</returns>
public static string EncryptDES(string encryptString, string encryptKey)
{
try
{
byte[] rgbKey = Encoding.UTF8.GetBytes(encryptKey.Substring(, ));
byte[] rgbIV = Iv;
byte[] inputByteArray = Encoding.UTF8.GetBytes(encryptString);
DESCryptoServiceProvider dCSP = new DESCryptoServiceProvider();
var mStream = new MemoryStream();
var cStream = new CryptoStream(mStream, dCSP.CreateEncryptor(rgbKey,rgbIV), CryptoStreamMode.Write);
cStream.Write(inputByteArray, , inputByteArray.Length);
cStream.FlushFinalBlock();
return Convert.ToBase64String(mStream.ToArray());
}
catch
{
return encryptString;
}
}
2、根据8位密钥,建立KEY和IV
public static string Encrypt(string pToEncrypt, string sKey)
{
var des = new DESCryptoServiceProvider();
//把字符串放到byte数组中
byte[] inputByteArray = Encoding.Default.GetBytes(pToEncrypt); //建立加密对象的密钥和偏移量
des.Key = Encoding.ASCII.GetBytes(sKey);
des.IV = Encoding.ASCII.GetBytes(sKey); var ms = new MemoryStream();
var cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
cs.Write(inputByteArray, , inputByteArray.Length);
cs.FlushFinalBlock(); return Encoding.UTF8.GetString(ms.ToArray());
}
3、KEY和IV为空,调用 GenerateKey 方法以创建新的随机key ,调用 GenerateIV 方法以创建新的随机 IV
using System;
using System.Security.Cryptography;
using System.Text; class EncryptorExample
{
private static string quote =
"Things may come to those who wait, but only the " +
"things left by those who hustle. -- Abraham Lincoln"; public static void Main()
{
AesCryptoServiceProvider aesCSP = new AesCryptoServiceProvider(); aesCSP.GenerateKey();
aesCSP.GenerateIV();
byte[] encQuote = EncryptString(aesCSP, quote); Console.WriteLine("Encrypted Quote:\n");
Console.WriteLine(Convert.ToBase64String(encQuote)); Console.WriteLine("\nDecrypted Quote:\n");
Console.WriteLine(DecryptBytes(aesCSP, encQuote));
} public static byte[] EncryptString(SymmetricAlgorithm symAlg, string inString)
{
byte[] inBlock = UnicodeEncoding.Unicode.GetBytes(inString);
ICryptoTransform xfrm = symAlg.CreateEncryptor();
byte[] outBlock = xfrm.TransformFinalBlock(inBlock, 0, inBlock.Length); return outBlock;
} public static string DecryptBytes(SymmetricAlgorithm symAlg, byte[] inBytes)
{
ICryptoTransform xfrm = symAlg.CreateDecryptor();
byte[] outBlock = xfrm.TransformFinalBlock(inBytes, 0, inBytes.Length); return UnicodeEncoding.Unicode.GetString(outBlock);
}
}
另外:一般DES加密完的字符串大概长这样:U2FsdGVkX1+PX0/VZiqtq/fOMdgdX7mTQh3RNACgods=
因为有一些特殊符号,如果拼在querystring中不便于传输,可以考虑这样写:
var str= new StringBuilder();
foreach (byte b in ms.ToArray())
{
str.AppendFormat("{0:X2}", b);
}
return str.ToString();
来代替直接返回 return Encoding.UTF8.GetString(ms.ToArray());
这样加密后的字符串长这样:4BD2B330AA45FFAD57109EE56D34E21B7E3858BA45A096220EB6634A5B779E80
C# DES加密,KEY和IV不同设置的写法的更多相关文章
- java加密工具类,可设置对应的加解密key
public class AesEncryptUtil { //使用AES-128-CBC加密模式,key需要为16位,key和iv可以相同! private static String KEY =& ...
- PHP调用内容DES加密的SOAP接口
本文以方倍工作室优惠券接口开发为例,介绍PHP下DES加解密及SOAP接口调用的实现过程. 一.基础概念 DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加 ...
- PHP与Java使用des加密通讯
http://www.pocketdigi.com/20121112/940.html 原文:http://toptulip.iteye.com/blog/780309 使用php加密字符串,生成密文 ...
- php和.net的DES加密解密方法
.net版本 /// <summary> /// DES加密 /// </summary> /// <param name="pToEncrypt"& ...
- 兼容PHP和Java的des加密解密代码分享
这篇文章主要介绍了兼容PHP和Java的des加密解密代码分享,适合如服务器是JAVA语言编写,客户端是PHP编写,并需要des加密解密的情况,需要的朋友可以参考下 作为一个iOS工程师来解决安卓的问 ...
- php实现和c#一致的DES加密解密
原文:php实现和c#一致的DES加密解密 php实现和c#一致的DES加密解密,可以从网上搜到一大堆,但是测试后发现都没法用.以下正确代码是我经过苦苦才找到的.希望大家在系统整合时能用的上. 注意: ...
- php中des加密解密 匹配C#des加密解密 对称加密
原文:php中des加密解密 匹配C#des加密解密 对称加密 网上找来的 php des加密解密 完全匹配上一篇C# 字符串加密解密函数 可以用于C#和php通信 对数据进行加密,其中$key 是 ...
- PHP 识别 java 8位 des 加密和 解密方式
代码及使用说明: <?php /** *PHP 识别 java 8位密钥的加密和解密方式 *@desc 加密方式 通用 */ class DES { var $key; var $iv; //偏 ...
- Android客户端与服务器端通过DES加密认证
转载地址:http://blog.csdn.net/spring21st/article/details/6730283 由于Android应用没有像web开发中的session机制,所以采用PHPS ...
随机推荐
- Error response from daemon: error creating overlay mount to /var/lib/docker/overlay2
环境:centos7.1 docker run -t -i centos /bin/bash 运行上面的命令开启容器时报错: /usr/bin/docker-current: Error respon ...
- Go学习笔记一:解析toml配置文件
本文系作者原创,转载请注明出处https://www.cnblogs.com/sonofelice/p/9085291.html . 一些mysql或者日志路径的信息需要放在配置文件中.那么本博文主要 ...
- Linux 下线程的理解
2017-04-03 最近深入研究了下Linux线程的问题,发现自己之前一直有些许误解,特记之…… 关于Linux下的线程,各种介绍Linux的书籍都没有深入去解释的,或许真的如书上所述,Linux本 ...
- Python并行编程(六):线程同步之条件
1.基本概念 条件指的是应用程序状态的改变.其中某些线程在等待某一条件发生,其 他线程会在该条件发生的时候进行通知,一旦条件发生,线程会拿到共享资源的唯一权限. 2.示例代码 from threadi ...
- redis之django-redis
自定义连接池 这种方式跟普通py文件操作redis一样,代码如下: views.py import redis from django.shortcuts import render,HttpResp ...
- C#线程池ThreadPool
线程池可以看做容纳线程的容器: 一个应用程序最多只能有一个线程池: 设置线程数量ThreadPool.SetMaxThreads(initDownCardThreadPool, maxDownCard ...
- ACM-ICPC 2018 南京赛区网络预赛 - J. Sum (找规律+打表)
题意:\(f(i):i\)能拆分成两个数的乘积,且要求这两个数中各自都没有出现超过1次的质因子.每次给出n,求\(\sum_{i=1}^{n}f(i)\) 分析:\(1 \le n \le 2e7\) ...
- C#小票打印机动态纸张尺寸
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- fir.im 测试包下载工具--FIRReader 的图文介绍
fir.im 是一个供开发者上传测试包(也可以是企业的正式包)的网站.该网站提供了接口访问应用资源.下面要介绍的这个应用对接了这些接口,供用户方便下载应用. 先来看下应用截图吧! 主要有以下功能点:1 ...
- c++之旅:函数模板
函数模板 函数模板主要是泛型在函数的中的应用,通过泛型可以让函数处理各种各样的数据类型 简单的列子 #include <iostream> using namespace std; tem ...