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 ...
随机推荐
- Yii框架2.0的视图和widgets表单的使用
2.0的控制器的创建和action方法的添加和1.0的基本是一样的.但我发现他的widgets 的ActiveForm和1.1版本有些不一样的地方. 对于视图基本也是一样的,有render 和 ren ...
- Apache mahout 源码阅读笔记--DataModel之FileDataModel
要做推荐,用户行为数据是基础. 用户行为数据有哪些字段呢? mahout的DataModel支持,用户ID,ItemID是必须的,偏好值(用户对当前Item的评分),时间戳 这四个字段 {@code ...
- 使用Custom Draw优雅的实现ListCtrl的重绘
common control 4.7版本介绍了一个新的特性叫做Custom Draw,这个名字显得模糊不清,让人有点摸不着头脑,而且MSDN里也只给出了一些如风的解释和例子,没有谁告诉你你想知道的,和 ...
- Linux基础配置
1 常用软件安装 yum install -y bash-completion vim lrzsz wget expect net-tools nc nmap tree dos2unix htop ...
- SVN导出Maven项目
1.从SVN检出项目 -> 作为工作空间中的项目检出 2.转换成Maven project 3.将Maven Project 转化成 Maven app 右击项目-> Properties ...
- PHP魔术方法和魔术常量介绍及使用
魔术方法(Magic methods) PHP中把以两个下划线__开头的方法称为魔术方法,这些方法在PHP中充当了举足轻重的作用. 魔术方法包括: __construct(),类的构造函数 __des ...
- 谷歌浏览器不能打开本地HTML文件
打开浏览器右上角菜单——>更多工具——>扩展程序——>将Axure RP Extension For Chrome 0.62.crx文件拖入——>成功后,勾选相关选项 文件的下 ...
- mysqldump 参数
mysqldump是mysql用于转存储数据库的实用程序.它主要产生一个SQL脚本,其中包含从头重新创建数据库所必需的命令CREATE TABLE INSERT等.对于导出的文件,可使用SOURCE命 ...
- Spring-1-E Game(HDU 5011)解题报告及测试数据
Game Time Limit:1000MS Memory Limit:65536KB Description Here is a game for two players. The rule ...
- laravel 图片上传 ajax 方式
laravel 图片上传 //后台轮播图上传 $("#img-upload").on('submit',function(e){ e.preventDefault(); var f ...