C#,PHP对应加密函数
Posted .Net C#相关记录和学习笔记的共享.支持开源
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#,PHP对应加密函数相关的知识,希望对你有一定的参考价值。
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("4322");//注意了,是8个字符,64位 static string IV_64 = ToMD5("6543");//注意了,是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(0, 8); 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, 0, 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, 0, 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 = "543";//注意了,是8个字符,64位 const string IV_64 = "543";//注意了,是8个字符,64位 const string ClientLocal_KEY_64 = "7654"; const string ClientLocal_IV_64 = "321232"; /// <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(), 0, (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(0, 8); return KEY_64; } #endregion }
以上是关于C#,PHP对应加密函数的主要内容,如果未能解决你的问题,请参考以下文章