php

<?php
class DES
{
var $key;
var $iv; //偏移量 function DES($key = '11001100', $iv=0 ) {
//key长度8例如:1234abcd
$this->key = $key;
if( $iv == 0 ) {
$this->iv = $key; //默认以$key 作为 iv
} else {
$this->iv = $iv; //mcrypt_create_iv ( mcrypt_get_block_size (MCRYPT_DES, MCRYPT_MODE_CBC), MCRYPT_DEV_RANDOM );
}
} function encrypt($str) {
//加密,返回大写十六进制字符串
$size = mcrypt_get_block_size ( MCRYPT_DES, MCRYPT_MODE_CBC );
$str = $this->pkcs5Pad ( $str, $size );
return strtoupper( bin2hex( mcrypt_cbc(MCRYPT_DES, $this->key, $str, MCRYPT_ENCRYPT, $this->iv ) ) );
} function decrypt($str) {
//解密
$strBin = $this->hex2bin( strtolower( $str ) );
$str = mcrypt_cbc( MCRYPT_DES, $this->key, $strBin, MCRYPT_DECRYPT, $this->iv );
$str = $this->pkcs5Unpad( $str );
return $str;
} function hex2bin($hexData) {
$binData = "";
for($i = 0; $i < strlen ( $hexData ); $i += 2) {
$binData .= chr ( hexdec ( substr ( $hexData, $i, 2 ) ) );
}
return $binData;
} function pkcs5Pad($text, $blocksize) {
$pad = $blocksize - (strlen ( $text ) % $blocksize);
return $text . str_repeat ( chr ( $pad ), $pad );
} function pkcs5Unpad($text) {
$pad = ord ( $text {strlen ( $text ) - 1} );
if ($pad > strlen ( $text ))
return false;
if (strspn ( $text, chr ( $pad ), strlen ( $text ) - $pad ) != $pad)
return false;
return substr ( $text, 0, - 1 * $pad );
} }
?>

c#

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Security.Cryptography;
using System.Text; namespace WindowsFormsApplication1
{
/// <summary>
/// DES加密解密字符串
/// </summary>
public class DesEncryption
{
/// <summary>
/// DES加密字符串
/// </summary>
/// <param name="encryptString">待加密的字符串</param>
/// <param name="encryptKey">加密密钥,要求为8位</param>
/// <returns>加密成功返回加密后的字符串,失败返回null</returns>
public static string EncryptDES(string encryptString, string encryptKey = "")
{
try
{
byte[] rgbKey = ASCIIEncoding.ASCII.GetBytes(encryptKey.Substring(, ));
byte[] rgbIV = rgbKey;
byte[] inputByteArray = Encoding.UTF8.GetBytes(encryptString);
DESCryptoServiceProvider dCSP = new DESCryptoServiceProvider();
MemoryStream mStream = new MemoryStream();
CryptoStream cStream = new CryptoStream(mStream, dCSP.CreateEncryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
cStream.Write(inputByteArray, , inputByteArray.Length);
cStream.FlushFinalBlock();
StringBuilder ret = new StringBuilder();
foreach (byte b in mStream.ToArray())
{
ret.AppendFormat("{0:X2}", b);
}
ret.ToString();
return ret.ToString();
}
catch
{
return null;
}
} /// <summary>
/// DES解密字符串
/// </summary>
/// <param name="decryptString">待解密的字符串</param>
/// <param name="decryptKey">解密密钥,要求为8位,和加密密钥相同</param>
/// <returns>解密成功返回解密后的字符串,失败返回null</returns>
public static string DecryptDES(string decryptString, string decryptKey = "")
{
try
{
byte[] rgbKey = ASCIIEncoding.ASCII.GetBytes(decryptKey);
byte[] rgbIV = rgbKey;
byte[] inputByteArray = new byte[decryptString.Length / ];
for (int x = ; x < decryptString.Length / ; x++)
{
int i = (Convert.ToInt32(decryptString.Substring(x * , ), ));
inputByteArray[x] = (byte)i;
}
DESCryptoServiceProvider DCSP = new DESCryptoServiceProvider();
MemoryStream mStream = new MemoryStream();
CryptoStream cStream = new CryptoStream(mStream, DCSP.CreateDecryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
cStream.Write(inputByteArray, , inputByteArray.Length);
cStream.FlushFinalBlock();
return Encoding.UTF8.GetString(mStream.ToArray());
}
catch
{
return null;
}
}
}
}

最新文章

  1. C++强制类型转换操作符 static_cast
  2. iis设置Gzip后,无后缀的url无法压缩解决 MVC iis GZIP
  3. [POJ] #1005# I Think I Need a Houseboat : 浮点数运算
  4. iOS 10 因苹果健康导致闪退 crash-b
  5. iOS开发——UI篇OC篇&amp;初始化图片方式
  6. css圆角 四边投影
  7. NagiosQL 跨站脚本漏洞
  8. eclipse下编译openfire3.9.1源码
  9. ERROR 1062 (23000): Duplicate entry &#39;1-1&#39; for key &#39;PRIMARY&#39;
  10. 内部框架——axure线框图部件库介绍
  11. java程序开发代写(QQ:928900200)
  12. Codeforce 712A Memory and Crow
  13. pb日志查看记录
  14. MyDAL - .QueryListAsync() 使用
  15. java求解第N个素数(质数)
  16. 20个必不可少的Python库
  17. zend framwork黑箱测试
  18. HttpLuaModule——翻译(二)
  19. 关于SQL Server 2017中使用json传参时解析遇到的多层解析问题
  20. stl源码分析de练习

热门文章

  1. 设置datagridview隔行变色
  2. C#排序算法的实现---快速排序
  3. C++-&gt;10.3.5.从键盘上输入职工的编号,从职工信息文件中查找该职工资料,查找成功时显示职工姓名、电话号码,邮政编码和地址。
  4. javaweb利用javabean将数据库中内容遍历在页面输出
  5. Educational Codeforces Round 82 (Rated for Div. 2)
  6. F.Three pahs on a tree
  7. Python 3.9.0 首个迭代版本发布了
  8. Python之xlrd模块读取xls文件与报错解决
  9. int long的数据范围
  10. File FileStream StreamReader和StreamWriter