700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > php descryptoserviceprovider [WPF]C#和php实现DES加密和解密

php descryptoserviceprovider [WPF]C#和php实现DES加密和解密

时间:2020-01-23 22:51:25

相关推荐

php descryptoserviceprovider [WPF]C#和php实现DES加密和解密

加密解密的时候如果只传一个key值那么向量值默认跟key值一样

c#中实现加密和解密的类

Des.csusingSystem;

usingSystem.IO;

usingSystem.Security.Cryptography;

usingSystem.Text;

namespaceAnk.Class

{

classDes

{

加解密密钥

//privatestaticstringskey="12345678";

初始化向量

//privatestaticbyte[]DESIV={0x12,0x34,0x56,0x78,0x90,0xAB,0xCD,0xEF};

#regionDESEnCodeDES加密

publicstaticstringEnCode(stringpToEncrypt,stringsKey,stringsIv=null)

{

try

{

if(sKey.Length

{

sKey=sKey.PadRight(8,'0');

}

else

{

sKey=sKey.Substring(0,8);

}

if(sIv==null)

{

sIv=sKey;

}

DESCryptoServiceProviderdes=newDESCryptoServiceProvider();

byte[]inputByteArray=Encoding.GetEncoding("UTF-8").GetBytes(pToEncrypt);

//建立加密对象的密钥和偏移量

//原文使用ASCIIEncoding.ASCII方法的GetBytes方法

//使得输入密码必须输入英文文本

des.Key=Encoding.ASCII.GetBytes(sKey);

des.IV=Encoding.ASCII.GetBytes(sKey);

MemoryStreamms=newMemoryStream();

CryptoStreamcs=newCryptoStream(ms,des.CreateEncryptor(),CryptoStreamMode.Write);

cs.Write(inputByteArray,0,inputByteArray.Length);

cs.FlushFinalBlock();

StringBuilderret=newStringBuilder();

foreach(bytebinms.ToArray())

{

ret.AppendFormat("{0:X2}",b);

}

returnret.ToString();

}

catch(Exceptionex)

{

Console.WriteLine(ex.Message);

return"";

}

}

#endregion

///pToDecrypt待解密的字符串

///sKey解密密钥,要求为8字节,和加密密钥相同

///returns解密成功返回解密后的字符串,失败返源串

#regionDESDeCodeDES解密

publicstaticstringDeCode(stringpToDecrypt,stringsKey,stringsIv=null)

{

try

{

if(sKey.Length

{

sKey=sKey.PadRight(8,'0');

}

else

{

sKey=sKey.Substring(0,8);

}

if(sIv==null)

{

sIv=sKey;

}

DESCryptoServiceProviderdes=newDESCryptoServiceProvider();

byte[]inputByteArray=newbyte[pToDecrypt.Length/2];

for(intx=0;x

{

inti=(Convert.ToInt32(pToDecrypt.Substring(x*2,2),16));

inputByteArray[x]=(byte)i;

}

des.Key=ASCIIEncoding.ASCII.GetBytes(sKey);

des.IV=ASCIIEncoding.ASCII.GetBytes(sKey);

MemoryStreamms=newMemoryStream();

CryptoStreamcs=newCryptoStream(ms,des.CreateDecryptor(),CryptoStreamMode.Write);

cs.Write(inputByteArray,0,inputByteArray.Length);

cs.FlushFinalBlock();

StringBuilderret=newStringBuilder();

returnSystem.Text.Encoding.Default.GetString(ms.ToArray());

}

catch(Exceptionex)

{

Console.WriteLine(ex.Message);

return"";

}

}

#endregion

}

}

php中进行加密解密的类classDES{

var$crypto=null;

var$key;

var$iv;//偏移量

functionDES($key,$iv=null){

//key长度8例如:1234abcd

$this->crypto=mcrypt_module_open(MCRYPT_DES,'',MCRYPT_MODE_CBC,'');

$key=substr($key,0,8);

if(is_null($iv)){

$this->iv=$key;//mcrypt_create_iv(mcrypt_enc_get_iv_size($this->crypto),MCRYPT_DEV_URANDOM);

}else{

$this->iv=$iv;

}

$this->key=$key;

}

functionencrypt($str){

//加密,返回大写十六进制字符串

$size=mcrypt_get_block_size(MCRYPT_DES,MCRYPT_MODE_CBC);

$str=$this->pkcs5Pad($str,$size);

mcrypt_generic_init($this->crypto,$this->key,$this->iv);

$enc_question=mcrypt_generic($this->crypto,$str);

mcrypt_generic_deinit($this->crypto);

returnstrtoupper(bin2hex($enc_question));

}

functiondecrypt($str){

//解密

$strBin=$this->hex2bin(strtolower($str));

mcrypt_generic_init($this->crypto,$this->key,$this->iv);

$str=mdecrypt_generic($this->crypto,$strBin);

mcrypt_generic_deinit($this->crypto);

$str=$this->pkcs5Unpad($str);

return$str;

}

functionhex2bin($hexData){

$binData="";

for($i=0;$i

$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);

}

function__destruct(){

//mcrypt_generic_deinit($this->crypto);

mcrypt_module_close($this->crypto);

}

}

$str="teststring";

$key='123412349';

$crypt=newDES($key);

$mstr=$crypt->encrypt($str);

echo"[$str]加密:[$mstr]

";

$str=$crypt->decrypt($mstr);

echo"[$mstr]解密:[$str]

";

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。