PHP与C#通用 DES 加解密

21 篇文章 0 订阅

PHP与C#通用 DES 加解密


 假设 DES key为: 12345678


C#

 //默认密钥向量   
    private static byte[] Keys = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };
    /// <summary>   
    /// DES加密字符串   
    /// </summary>   
    /// <param name="encryptString">待加密的字符串</param>   
    /// <param name="encryptKey">加密密钥,要求为8位</param>   
    /// <returns>加密成功返回加密后的字符串,失败返回源串</returns>   
    public static string EncryptDES(string encryptString, string encryptKey)
    {
        try
        {
            byte[] rgbKey = Encoding.UTF8.GetBytes(Encoding.Default.GetString(encryptKey));
            byte[] rgbIV = Keys;
            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, 0, inputByteArray.Length);
            cStream.FlushFinalBlock();
            return Convert.ToBase64String(mStream.ToArray());
        }
        catch
        {
            return encryptString;
        }
    }
    /// <summary>   
    /// DES解密字符串   
    /// </summary>   
    /// <param name="decryptString">待解密的字符串</param>   
    /// <param name="decryptKey">解密密钥,要求为8位,和加密密钥相同</param>   
    /// <returns>解密成功返回解密后的字符串,失败返源串</returns>   
    public static string DecryptDES(string decryptString, string encryptKey)
    {
        try
        {
            byte[] rgbKey = Encoding.UTF8.GetBytes(Encoding.Default.GetString(encryptKey));
            byte[] rgbIV = Keys;
            byte[] inputByteArray = Convert.FromBase64String(decryptString);
            DESCryptoServiceProvider DCSP = new DESCryptoServiceProvider();
            MemoryStream mStream = new MemoryStream();
            CryptoStream cStream = new CryptoStream(mStream, DCSP.CreateDecryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
            cStream.Write(inputByteArray, 0, inputByteArray.Length);
            cStream.FlushFinalBlock();
            return Encoding.UTF8.GetString(mStream.ToArray());
        }
        catch
        {
            return decryptString;
        }

    }



对应PHP

class DES {
    private $_key = '12345678';//输入密钥

    public function encrypt($string) {
        $ivArray = array(0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF);
        $iv      = null;
        foreach ($ivArray as $element) {
            $iv.=CHR($element);
        }
        $size   = mcrypt_get_block_size(MCRYPT_DES, MCRYPT_MODE_CBC);
        $string = $this->pkcs5Pad($string, $size);
        $data   = mcrypt_encrypt(MCRYPT_DES, $this->_key, $string, MCRYPT_MODE_CBC, $iv);
        $data   = base64_encode($data);
        return $data;
    }

    public function decrypt($string) {
        $ivArray = array(0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF);
        $iv      = null;
        foreach ($ivArray as $element) {
            $iv.=CHR($element);
        }
        $string = base64_decode($string);
        $result = mcrypt_decrypt(MCRYPT_DES, $this->_key, $string, MCRYPT_MODE_CBC, $iv);
        $result = $this->pkcs5Unpad($result);

        return $result;
    }

    private function pkcs5Pad($text, $blocksize) {
        $pad = $blocksize - (strlen($text) % $blocksize);
        return $text . str_repeat(chr($pad), $pad);
    }

    private 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);
    }

}

//demo
$o = new DES();
#如果包含中文,需要转码为utf-8
$str = '';
$str = $o->decrypt($str);



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用C#进行DES加密和解密的代码示例: ```csharp using System; using System.Security.Cryptography; using System.Text; public class DESExample { public static string Encrypt(string plainText, byte[] key, byte[] iv) { byte[] encrypted; using (DESCryptoServiceProvider des = new DESCryptoServiceProvider()) { des.Key = key; des.IV = iv; ICryptoTransform encryptor = des.CreateEncryptor(des.Key, des.IV); using (var memoryStream = new System.IO.MemoryStream()) { using (var cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write)) { using (var streamWriter = new System.IO.StreamWriter(cryptoStream)) { streamWriter.Write(plainText); } encrypted = memoryStream.ToArray(); } } } return Convert.ToBase64String(encrypted); } public static string Decrypt(string cipherText, byte[] key, byte[] iv) { byte[] decrypted; using (DESCryptoServiceProvider des = new DESCryptoServiceProvider()) { des.Key = key; des.IV = iv; ICryptoTransform decryptor = des.CreateDecryptor(des.Key, des.IV); using (var memoryStream = new System.IO.MemoryStream(Convert.FromBase64String(cipherText))) { using (var cryptoStream = new CryptoStream(memoryStream, decryptor, CryptoStreamMode.Read)) { using (var streamReader = new System.IO.StreamReader(cryptoStream)) { decrypted = Encoding.UTF8.GetBytes(streamReader.ReadToEnd()); } } } } return Encoding.UTF8.GetString(decrypted); } } ``` 使用示例: ```csharp byte[] key = Encoding.UTF8.GetBytes("01234567"); byte[] iv = Encoding.UTF8.GetBytes("abcdefgh"); string plainText = "Hello, World!"; string encryptedText = DESExample.Encrypt(plainText, key, iv); Console.WriteLine($"Encrypted: {encryptedText}"); string decryptedText = DESExample.Decrypt(encryptedText, key, iv); Console.WriteLine($"Decrypted: {decryptedText}"); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值