require_once "JunDes.php";

$jDes=new JunDes();
echo $jDes->encode('98765'); //echo $jDes->key_64;
//echo $jDes->iv_64;
<?php
/**
* Created by PhpStorm.
* User: yanjun
* Date: 17/1/4
* Time: 10:43
*/
class JunDes { private static $_instance = NULL; public $key_64='5432';
public $iv_64='987654'; function toMd5($str)
{
return substr(strtoupper(md5($str)),0,8);
} /**
* @return JoDES
*/
public static function share() {
if (is_null(self::$_instance)) {
self::$_instance = new JoDES();
}
return self::$_instance;
} /**
* 加密
* @param string $str 要处理的字符串
* @param string $key 加密Key,为8个字节长度
* @return string
*/
public function encode($str) {
$size = mcrypt_get_block_size(MCRYPT_DES, MCRYPT_MODE_CBC);
$str = $this->pkcs5Pad($str, $size);
$aaa = mcrypt_cbc(MCRYPT_DES, $this->toMd5($this->key_64), $str, MCRYPT_ENCRYPT, $this->toMd5($this->iv_64));
$ret = base64_encode($aaa);
return $ret;
} /**
* 解密
* @param string $str 要处理的字符串
* @param string $key 解密Key,为8个字节长度
* @return string
*/
public function decode($str, $key) {
$strBin = base64_decode($str);
$str = mcrypt_cbc(MCRYPT_DES, $this->toMd5($this->key_64), $strBin, MCRYPT_DECRYPT, $this->toMd5($this->iv_64));
$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#

public class MyDes
{ //加密/解密钥匙
static string KEY_64 = ToMD5("");//注意了,是8个字符,64位
static string IV_64 = ToMD5("");//注意了,是8个字符,64位 #region MD5加密
/// <summary>
/// 转换MD5密码
/// </summary>
/// <param name="pass"></param>
/// <returns></returns>
public static string ToMD5(string KEY)
{
byte[] result = Encoding.Default.GetBytes(KEY);
MD5 md5 = new MD5CryptoServiceProvider();
byte[] output = md5.ComputeHash(result); string KEY_64 = BitConverter.ToString(output).Replace("-", "").Substring(, );
return KEY_64; }
#endregion /// <summary>
/// DES加密方法
/// </summary>
/// <param name="strPlain">明文</param>
/// <param name="strDESKey">密钥</param>
/// <param name="strDESIV">向量</param>
/// <returns>密文</returns>
public static string Encode(string source)
{
StringBuilder sb = new StringBuilder();
using (DESCryptoServiceProvider des = new DESCryptoServiceProvider())
{
byte[] key = ASCIIEncoding.ASCII.GetBytes(KEY_64);
byte[] iv = ASCIIEncoding.ASCII.GetBytes(IV_64);
byte[] dataByteArray = Encoding.UTF8.GetBytes(source);
des.Mode = System.Security.Cryptography.CipherMode.CBC;
des.Key = key;
des.IV = iv;
string encrypt = "";
using (MemoryStream ms = new MemoryStream())
using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write))
{
cs.Write(dataByteArray, , dataByteArray.Length);
cs.FlushFinalBlock();
encrypt = Convert.ToBase64String(ms.ToArray());
}
return encrypt;
}
} /// <summary>
/// 进行DES解密。
/// </summary>
/// <param name="pToDecrypt">要解密的base64串</param>
/// <param name="sKey">密钥,且必须为8位。</param>
/// <returns>已解密的字符串。</returns>
public static string Decode(string source)
{
byte[] inputByteArray = System.Convert.FromBase64String(source);//Encoding.UTF8.GetBytes(source);
using (DESCryptoServiceProvider des = new DESCryptoServiceProvider())
{
des.Key = ASCIIEncoding.ASCII.GetBytes(KEY_64);
des.IV = ASCIIEncoding.ASCII.GetBytes(IV_64);
System.IO.MemoryStream ms = new System.IO.MemoryStream();
using (CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write))
{
cs.Write(inputByteArray, , inputByteArray.Length);
cs.FlushFinalBlock();
cs.Close();
}
string str = Encoding.UTF8.GetString(ms.ToArray());
ms.Close();
return str;
}
}
}

方式2

/// <summary>
/// 加密/解密类
/// </summary>
public class EncAndDec
{
//加密/解密钥匙
const string KEY_64 = "";//注意了,是8个字符,64位
const string IV_64 = "";//注意了,是8个字符,64位 const string ClientLocal_KEY_64 = "";
const string ClientLocal_IV_64 = ""; /// <summary>
/// 加密的方法,通过2个密匙进行加密
/// </summary>
/// <param name="data">加密的数据</param>
/// <returns>返回加密后的字符串</returns>
public static string Encode(string data)
{
EncAndDec ed = new EncAndDec();
return ed.Encode(data, KEY_64, IV_64);
}
/// <summary>
/// 解密的方法
/// </summary>
/// <param name="data">解密的数据</param>
/// <returns>返回加密前的字符串</returns>
public static string Decode(string data)
{
EncAndDec ed = new EncAndDec();
return ed.Decode(data, KEY_64, IV_64);
} /// <summary>
/// 客户本地加密的方法,通过2个密匙进行加密
/// </summary>
/// <param name="data">加密的数据</param>
/// <returns>返回加密后的字符串</returns>
public static string EncodeClientLocal(string data)
{
EncAndDec ed = new EncAndDec();
return ed.Encode(data, ClientLocal_KEY_64, ClientLocal_IV_64);
}
/// <summary>
/// 客户本地解密的方法
/// </summary>
/// <param name="data">解密的数据</param>
/// <returns>返回加密前的字符串</returns>
public static string DecodeClientLocal(string data)
{
EncAndDec ed = new EncAndDec();
return ed.Decode(data, ClientLocal_KEY_64, ClientLocal_IV_64);
} #region DEC加密的方法
/// <summary>
/// 加密的方法,通过2个密匙进行加密
/// </summary>
/// <param name="data">通过Md5加密一次</param>
/// <param name="KEY_64"></param>
/// <param name="IV_64"></param>
/// <returns></returns>
private string Encode(string data, string KEY_64, string IV_64)
{ KEY_64 = ToMD5(KEY_64);
IV_64 = ToMD5(IV_64);
byte[] byKey = System.Text.ASCIIEncoding.ASCII.GetBytes(KEY_64);
byte[] byIV = System.Text.ASCIIEncoding.ASCII.GetBytes(IV_64); DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();
//int i = cryptoProvider.KeySize;
MemoryStream ms = new MemoryStream();
CryptoStream cst = new CryptoStream(ms, cryptoProvider.CreateEncryptor(byKey, byIV), CryptoStreamMode.Write); StreamWriter sw = new StreamWriter(cst);
sw.Write(data);
sw.Flush();
cst.FlushFinalBlock();
sw.Flush();
return Convert.ToBase64String(ms.GetBuffer(), , (int)ms.Length); }
/// <summary>
/// 解密的方法()
/// </summary>
/// <param name="data"></param>
/// <param name="KEY_64"></param>
/// <param name="IV_64"></param>
/// <returns></returns>
private string Decode(string data, string KEY_64, string IV_64)
{
KEY_64 = ToMD5(KEY_64);
IV_64 = ToMD5(IV_64);
byte[] byKey = System.Text.ASCIIEncoding.ASCII.GetBytes(KEY_64);
byte[] byIV = System.Text.ASCIIEncoding.ASCII.GetBytes(IV_64); byte[] byEnc;
try
{
byEnc = Convert.FromBase64String(data);
}
catch
{
return null;
} DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();
MemoryStream ms = new MemoryStream(byEnc);
CryptoStream cst = new CryptoStream(ms, cryptoProvider.CreateDecryptor(byKey, byIV), CryptoStreamMode.Read);
StreamReader sr = new StreamReader(cst);
return sr.ReadToEnd();
}
#endregion #region MD5加密
/// <summary>
/// 转换MD5密码
/// </summary>
/// <param name="pass"></param>
/// <returns></returns>
public static string ToMD5(string KEY)
{
byte[] result = Encoding.Default.GetBytes(KEY);
MD5 md5 = new MD5CryptoServiceProvider();
byte[] output = md5.ComputeHash(result); string KEY_64 = BitConverter.ToString(output).Replace("-", "").Substring(, );
return KEY_64; }
#endregion }

C#,PHP对应加密函数的更多相关文章

  1. (转)笔记320 SQLSERVER中的加密函数 2013-7-11

    1 --SQLSERVER中的加密函数 2013-7-11 2 ENCRYPTBYASYMKEY() --非对称密钥 3 ENCRYPTBYCERT() --证书加密 4 ENCRYPTBYKEY() ...

  2. PHP的几个常用加密函数

    在php的开发过程中,常常需要对部分数据(如用户密码)进行加密 一.加密类型: 1.单向散列加密 就是把任意长度的信息进行散列计算,得到固定长度的输出,这个散列计算过程是单向的,即不能对固定长度的输出 ...

  3. PHP的几个常用加密函数(转载 https://jellybool.com/post/php-encrypt-functions)

    PHP的几个常用加密函数 在网站的开发过程中,常常需要对部分数据(如用户密码)进行加密,本文主要介绍PHP的几个常见的加密函数 MD5加密: string md5 ( string $str [, b ...

  4. (转载)MS SQL Server 未公开的加密函数有哪些?

    MS SQL Server 未公开的加密函数有哪些? 以下的文章是对MS SQL Server 未公开的加密函数的具体操作,如果你对其相关的实际操作有兴趣的话,你就可以点击了. MS SQL Serv ...

  5. ThinkPHP第二十五天(自动完成、用户名密码PHP正则、移位或加密函数)

    1.ThinkPHP自动完成功能 跟昨天的自动验证功能类似,也是需要在自定义的UserModel类,进行使用. 使用方法:定义$_auto属性 $_auto = array( array(完成字段,完 ...

  6. PHP的几个常用加密函数【转载】

    转自 https://jellybool.com/post/php-encrypt-functions 在网站的开发过程中,常常需要对部分数据(如用户密码)进行加密,本文主要介绍PHP的几个常见的加密 ...

  7. 网上搜集的一段php可逆加密函数

    php加密函数: function my_encrypt($data, $key='unun.in') { $char = $str = ''; $key = md5($key); $x = 0; $ ...

  8. 一个简洁的PHP可逆加密函数(分享)

    http://www.jb51.net/article/38018.htm 本篇文章是对一个简洁的PHP可逆加密函数进行了详细的分析介绍,需要的朋友参考下   很多时候我们需要对数据进行加密解密,比如 ...

  9. 常用的几个PHP加密函数

    1.前言 PHP加密方式分为单项散列加密,对称加密,非对称加密这几类. 像常用的MD5.hash.crypt.sha1这种就是单项散列加密,单项散列加密是不可逆的. 像URL编码.base64编码这种 ...

  10. php提供的用户密码加密函数

    在实际项目中,对用户的密码加密基本上采用的  md5加盐的方式, php5.5后提供了一个加密函数,不需要手动加盐,不需要去维护盐值, $str = "123456"; $pwd ...

随机推荐

  1. mysql-----gtid_executed详解 原创

    MySQL 5.6版本开启GTID模式,必须打开参数log_slave_updates, 简单来说就是必须在从机上再记录一份二进制日志.这样的无论对性能还是存储的开销,无疑会相应的增大 而MySQL ...

  2. Helpers\Document

    Helpers\Document The document class is a collection of useful methods for working with files. To get ...

  3. hashTable(哈希表)的基本用法

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.C ...

  4. 一网打尽OkHttp中的缓存问题

    看到很多小伙伴对OkHttp的缓存问题并不是十分了解,于是打算来说说这个问题.用好OkHttp中提供的缓存,可以帮助我们更好的使用Retrofit.Picasso等配合OkHttp使用的框架.OK,废 ...

  5. 使用 Feedly RSS阅读器订阅技术大牛的博客

    这几天一直都在自己看书,可是书上面的东西都比较落后一点,而且没有大牛博文上的东西讲的深入,可是来回跳转各位大牛的博客又非常的麻烦,有一些公众账号虽然也会推荐一些知识内容,可是你应该有过看到多个公众号发 ...

  6. next_permutation()—遍历全排列

    # next_permutation()--遍历全排列 template <class BidirectionalIterator> bool next_permutation (Bidi ...

  7. GDB调试器简介

     Linux系统中包含了GNU 调试程序gdb,它是一个用来调试C和 C++ 程序的调试器.可以使程序开发者在程序运行时观察程序的内部结构和内存的使用情况. GDB提供了一下一些功能: (1)监视程序 ...

  8. CMS垃圾回收与G1垃圾回收

    CMS垃圾回收与G1垃圾回收的比较请参见:http://colobu.com/2015/04/14/G1-Getting-Started/

  9. Android布局中的空格以及占一个汉字宽度的空格的实现

    在Android布局中进行使用到空格,以便实现文字的对齐.那么在Android中如何表示一个空格呢? 空格:  窄空格:  一个汉字宽度的空格:   [用两个空格(  )占一个汉字的宽度时,两个空格比 ...

  10. 会话跟踪技术——cookie

    一.会话控制 为了使得网站可以跟踪客户端与服务器之间的交互,保存和记忆每个用户的身份和信息,我们需要一种强有力的解决方案,这样就产生了会话控制. HTTP是一个无状态的协议,此协议无法来维护两个事务之 ...