BuenAS:
Utiliza mejor estas que sí devuelven valores. Es que lo estoy sacandolo de una aplicación que tenía por aquí y el código lo tenía un poco "liado" para despistar si me lo decompilan. Cambie unos cuantos nombres y lo pegué sin más.
Código ActionScript :
public function encrypt(
txt:String,
k:String,
kformat:String="hex", format:String="hex", outputFormat:String="hex",
encType:String="aes", modeType:String="cbc", paddingType:String="pkcs5",
simple:Boolean=false):Object
{
var kdata:ByteArray;
switch (kformat) {
case "hex":
kdata = Hex.toArray(k);
break;
case "b64":
kdata = Base64.decodeToByteArray(k);
break;
default:
kdata = Hex.toArray(Hex.fromString(k));
break;
};
var data:ByteArray;
switch (format) {
case "hex":
data = Hex.toArray(txt);
break;
case "b64":
data = Base64.decodeToByteArray(txt);
break;
default:
data = Hex.toArray(Hex.fromString(txt));
break;
};
var name:String = encType + "-" + modeType;
if (simple)
name = "simple-" + name;
var encryptText:String = "";
var initVector:String = "";
var pad:IPad = (paddingType == "pkcs5") ? new PKCS5 : new NullPad;
try
{
var mode:ICipher = Crypto.getCipher(name, kdata, pad);
pad.setBlockSize(mode.getBlockSize());
mode.encrypt(data);
if (data != null)
{
switch (outputFormat) {
case "hex":
encryptText = Hex.fromArray(data);
break;
case "b64":
encryptText = Base64.encodeByteArray(data);
break;
default:
encryptText = Hex.toString(Hex.fromArray(data));
break;
}
if (mode is IVMode)
{
var ivmode:IVMode = mode as IVMode;
initVector = Hex.fromArray(ivmode.IV);
};
};
}
catch (e:Error)
{
trace("Error al encriptar");
};
return {encryptText: encryptText, initVector: initVector};
}
public function decrypt(
txt:String,
k:String,
ivText:String,
kformat:String="hex", format:String="hex",
encType:String="aes", modeType:String="cbc", paddingType:String="pkcs5",
simple:Boolean=false):String
{
var kdata:ByteArray;
switch (kformat)
{
case "hex":
kdata = Hex.toArray(k);
break;
case "b64":
kdata = Base64.decodeToByteArray(k);
break;
default:
kdata = Hex.toArray(Hex.fromString(k));
break;
};
var data:ByteArray;
switch (format)
{
case "hex":
data = Hex.toArray(txt);
break;
case "b64":
data = Base64.decodeToByteArray(txt);
break;
default:
data = Hex.toArray(Hex.fromString(txt));
break;
}
var name:String = encType + "-" + modeType;
if (simple)
name = "simple-" + name;
var pad:IPad = (paddingType == "pkcs5") ? new PKCS5 : new NullPad;
var mode:ICipher = Crypto.getCipher(name, kdata, pad);
pad.setBlockSize(mode.getBlockSize());
if (mode is IVMode)
{
var ivmode:IVMode = mode as IVMode;
ivmode.IV = Hex.toArray(ivText);
};
var decryptText:String = "";
try
{
mode.decrypt(data);
if (data != null)
{
switch (format)
{
case "hex":
decryptText = Hex.toString(Hex.fromArray(data));
break;
case "b64":
decryptText = Hex.toString(Base64.encodeByteArray(data));
break;
default:
decryptText = Hex.toString(Hex.fromArray(data));
break;
};
};
}
catch (e:Error)
{
trace("Error al desencriptar");
};
return decryptText;
}
Funciona igual que como te decía. Para encriptar:
encrypt(textoAEncriptar, clave, "hex", "text", "hex");
y te devuelve un objeto con {encryptText: encryptText, initVector: initVector}, el texto encriptado y una cadena de comprobación a utilizar para desencriptar (sería mejor que utilizaras en lugar de un objeto una clase ValueObject con estos dos valores);
Y para desencriptar
decrypt(textoEncriptado, clave, initVector, "hex", "hex");
donde initVector es la cadena de control que se generó al encriptar.
Esto sí te debe funcionar.
Un saludo.