-
Notifications
You must be signed in to change notification settings - Fork 6
Using symmetric algorithms
rubo edited this page Jul 11, 2012
·
1 revision
The following example demonstrates how to encrypt and decrypt sample data using the AES class.
var secret:String = "abc";
var data:ByteArray = new ByteArray(); // The data to encrypt.
data.writeUTFBytes(secret);
var aes:AES = new AES();
aes.iv = RandomNumberGenerator.getBytes(aes.blockSize / 8);
aes.key = RandomNumberGenerator.getBytes(aes.keySize / 8);
var aesEnc:ICryptoTransform = aes.createEncryptor();
var cipher:ByteArray = aesEnc.transformFinalBlock(data, 0, data.length);
trace(Convert.toBase64String(cipher)); // Outputs the encrypted data.
var aesDec:ICryptoTransform = aes.createDecryptor();
data = aesDec.transformFinalBlock(cipher, 0, cipher.length);
secret = data.readUTFBytes(data.bytesAvailable);
trace(secret); // Outputs the decrypted data.
To to encrypt or decrypt files or blocks of large data or to display progress status the transformBlock() and the transformFinalBlock() methods must be used.
var aes:AES = new AES();
var cipher:ByteArray = new ByteArray();
var inputBlockSize:int;
var inputOffset:int;
var outputOffset:int;
var data:ByteArray = RandomNumberGenerator.getBytes(2048); // The data to encrypt.
trace(Convert.toBase64String(data)); // Outputs the plain data.
aes.iv = RandomNumberGenerator.getBytes(aes.blockSize / 8);
aes.key = RandomNumberGenerator.getBytes(aes.keySize / 8);
var aesEnc:ICryptoTransform = aes.createEncryptor();
inputBlockSize = aesEnc.inputBlockSize;
for (inputOffset = 0, outputOffset = 0; data.length - outputOffset > inputBlockSize; inputOffset += inputBlockSize)
outputOffset += aesEnc.transformBlock(data, inputOffset, inputBlockSize, cipher, outputOffset);
cipher.writeBytes(aesEnc.transformFinalBlock(data, outputOffset, data.length - outputOffset));
trace(Convert.toBase64String(cipher)); // Outputs the encrypted data.
var aesDec:ICryptoTransform = aes.createDecryptor();
data.clear();
for (inputOffset = 0, outputOffset = 0; cipher.length - outputOffset > inputBlockSize; inputOffset += inputBlockSize)
outputOffset += aesDec.transformBlock(cipher, inputOffset, aesDec.inputBlockSize, data, outputOffset);
data.writeBytes(aesDec.transformFinalBlock(cipher, inputOffset, cipher.length - inputOffset));
trace(Convert.toBase64String(data)); // Outputs the decrypted data.