在AS3 DES加密,在C# DES解密

本文介绍了一种使用DES算法实现AS3和C#之间的跨平台加密解密方法。通过定义相同的密钥和初始化向量(IV),确保了在不同平台上加密和解密的一致性。具体步骤包括在AS3中使用CBC模式加密数据,并通过Base64编码进行传输;在C#端则使用相同的密钥和CBC模式进行解密。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import com.hurlant.crypto.symmetric.CBCMode;
import com.hurlant.crypto.symmetric.DESKey;
import com.hurlant.util.Base64;
import flash.utils.ByteArray;
            public static function Encrypt(data:String):String{
			var keyStr:String = 'YourKeys'; //你的密钥,key和 iv可以自己定义不同的,但是必须为8位字符
			var key:ByteArray = new ByteArray();                        
			key.writeUTFBytes(keyStr);
			var  iv:ByteArray= new ByteArray();
			iv.writeUTFBytes(keyStr);
			var des:DESKey = new DESKey(key);                        
			var cbc:CBCMode = new CBCMode(des); //加密模式,有多种模式供你选择
			cbc.IV = iv; //设置加密的IV
			/* 得到的密文长度和明文的长度有关,规律大致是:明文<8 密文=12 ,明文<16 密文=24 ,明文>=16 密文=32......后面希望你们推一下*/
			var tmpByteArray:ByteArray = convertStringToByteArray(data); //转换成二进制编码 (该函数自己定义)
			cbc.encrypt(tmpByteArray);                         //利用加密模式对数据进行加密
			var encryptData:String = Base64.encodeByteArray(tmpByteArray); //利用base64对密文进行编码	
			function convertStringToByteArray(str:String):ByteArray
			{
				var bytes:ByteArray;
				if (str)
				{
					bytes=new ByteArray();
					bytes.writeUTFBytes(str);
				}
				return bytes;
			}
			return encryptData;
		}

上面是AS3加密,下面是C#解密

/// <summary>
    /// DES解密字符串
    /// </summary>
    /// <param name="decryptString">待解密的字符串</param>
    /// <param name="decryptKey">解密密钥,要求为8位,和加密密钥相同</param>
    /// <returns>解密成功返回解密后的字符串,失败返源串</returns>
    public static string DecryptDES(string decryptString, string key)
    {                                                                                                                                                             descrytString= decryptString.Replace(" ", "+");
        byte[] btKey = Encoding.Default.GetBytes(key);
        byte[] btIV = Encoding.Default.GetBytes(key);
        DESCryptoServiceProvider des = new DESCryptoServiceProvider();
        des.Mode = CipherMode.CBC;
        des.Padding = PaddingMode.PKCS7;
        using (MemoryStream ms = new MemoryStream())
        {
            byte[] inData = Convert.FromBase64String(decryptString);
            try
            {
                using (CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(btKey, btIV), CryptoStreamMode.Write))
                {
                    cs.Write(inData, 0, inData.Length);
                    cs.FlushFinalBlock();
                }
                return Encoding.Default.GetString(ms.ToArray());
            }
            catch
            {
                throw;
            }
        }
    }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值