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