PHP、C#、通用的DES加密
发布时间:2020-05-25 07:51:43 所属栏目:PHP 来源:互联网
导读:PHP、C#、通用的DES加密
|
下面是脚本之家 jb51.cc 通过网络收集整理的代码片段。 脚本之家小编现在分享给大家,也给大家做个参考。 classJoDES{
privatestatic$_instance=NULL;
/**
*@returnJoDES
*/
publicstaticfunctionshare(){
if(is_null(self::$_instance)){
self::$_instance=newJoDES();
}
returnself::$_instance;
}
/**
*加密
*@paramstring$str要处理的字符串
*@paramstring$key加密Key,为8个字节长度
*@returnstring
*/
publicfunctionencode($str,$key){
$size=mcrypt_get_block_size(MCRYPT_DES,MCRYPT_MODE_CBC);
$str=$this->pkcs5Pad($str,$size);
$aaa=mcrypt_cbc(MCRYPT_DES,$key,$str,MCRYPT_ENCRYPT,$key);
$ret=base64_encode($aaa);
return$ret;
}
/**
*解密
*@paramstring$str要处理的字符串
*@paramstring$key解密Key,为8个字节长度
*@returnstring
*/
publicfunctiondecode($str,$key){
$strBin=base64_decode($str);
$str=mcrypt_cbc(MCRYPT_DES,$strBin,MCRYPT_DECRYPT,$key);
$str=$this->pkcs5Unpad($str);
return$str;
}
functionhex2bin($hexData){
$binData="";
for($i=0;$i<strlen($hexData);$i+=2){
$binData.=chr(hexdec(substr($hexData,$i,2)));
}
return$binData;
}
functionpkcs5Pad($text,$blocksize){
$pad=$blocksize-(strlen($text)%$blocksize);
return$text.str_repeat(chr($pad),$pad);
}
functionpkcs5Unpad($text){
$pad=ord($text{strlen($text)-1});
if($pad>strlen($text))
returnfalse;
if(strspn($text,chr($pad),strlen($text)-$pad)!=$pad)
returnfalse;
returnsubstr($text,0,-1*$pad);
}
}
publicclassMyDes
{
///<summary>
///DES加密方法
///</summary>
///<paramname="strPlain">明文</param>
///<paramname="strDESKey">密钥</param>
///<paramname="strDESIV">向量</param>
///<returns>密文</returns>
publicstaticstringEncode(stringsource,string_DESKey)
{
StringBuildersb=newStringBuilder();
using(DESCryptoServiceProviderdes=newDESCryptoServiceProvider())
{
byte[]key=ASCIIEncoding.ASCII.GetBytes(_DESKey);
byte[]iv=ASCIIEncoding.ASCII.GetBytes(_DESKey);
byte[]dataByteArray=Encoding.UTF8.GetBytes(source);
des.Mode=System.Security.Cryptography.CipherMode.CBC;
des.Key=key;
des.IV=iv;
stringencrypt="";
using(MemoryStreamms=newMemoryStream())
using(CryptoStreamcs=newCryptoStream(ms,des.CreateEncryptor(),CryptoStreamMode.Write))
{
cs.Write(dataByteArray,dataByteArray.Length);
cs.FlushFinalBlock();
encrypt=Convert.ToBase64String(ms.ToArray());
}
returnencrypt;
}
}
///<summary>
///进行DES解密。
///</summary>
///<paramname="pToDecrypt">要解密的base64串</param>
///<paramname="sKey">密钥,且必须为8位。</param>
///<returns>已解密的字符串。</returns>
publicstaticstringDecode(stringsource,stringsKey)
{
byte[]inputByteArray=System.Convert.FromBase64String(source);//Encoding.UTF8.GetBytes(source);
using(DESCryptoServiceProviderdes=newDESCryptoServiceProvider())
{
des.Key=ASCIIEncoding.ASCII.GetBytes(sKey);
des.IV=ASCIIEncoding.ASCII.GetBytes(sKey);
System.IO.MemoryStreamms=newSystem.IO.MemoryStream();
using(CryptoStreamcs=newCryptoStream(ms,des.CreateDecryptor(),CryptoStreamMode.Write))
{
cs.Write(inputByteArray,inputByteArray.Length);
cs.FlushFinalBlock();
cs.Close();
}
stringstr=Encoding.UTF8.GetString(ms.ToArray());
ms.Close();
returnstr;
}
}
}
以上是脚本之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。 如果觉得脚本之家网站内容还不错,欢迎将脚本之家网站推荐给程序员好友。 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
