1

我想用 adobe air 加密和解密文件。我成功地用代码加密文件。但我还没有解密加密文件,请帮帮我,我该怎么办?

我正在使用此代码进行加密:

import com.hurlant.crypto.symmetric.AESKey;
import com.hurlant.crypto.symmetric.DESKey;
import com.hurlant.util.Hex;
import flash.filesystem.FileStream;
import flash.filesystem.File;
import flash.utils.ByteArray;
import flash.filesystem.FileMode;
import flash.display.BitmapData;
import flash.display.Bitmap;
import com.hurlant.util.ArrayUtil;

stop();

var stream:FileStream;
var stream2:FileStream;
var file:File;

var fileToEncrypt:ByteArray;

encrypt();

function encrypt():void
{
    file = File.applicationDirectory.resolvePath("logo_markatalog.png");

    fileToEncrypt = new ByteArray;

stream = new FileStream();
stream.open( file, FileMode.READ );
stream.readBytes(fileToEncrypt);
stream.close();

var appDir:String = File.applicationDirectory.nativePath;
//file = File(appDir+"logo_markatalog_enc.png");

file = new File(appDir+"/logo_markatalog_enc.png");

var key:ByteArray = Hex.toArray("635232557");
var aes:AESKey = new AESKey(key);

aes.encrypt(fileToEncrypt);

stream2 = new FileStream();
stream2.open( file, FileMode.WRITE );
stream2.writeBytes(fileToEncrypt);
stream2.close();
}
4

1 回答 1

1

我不能告诉你你做错了什么,但我可以给你我用来将对象加密到文件中并将它们解密回来的东西。

someKey var 是您用于加密和解密的密钥。

theFileWithEncryptedObject var 是我在第一个代码部分中保存我的加密对象的文件,我从中读取第二个代码部分中的加密对象。

我在密钥上使用 md5 哈希,这不是必需的。

这是我使用 hurlant.crypto 将对象加密到文件中的方式:

var fileStream:FileStream = new FileStream();
fileStream.open(theFileWithEncryptedObject, FileMode.WRITE);
var bytes:ByteArray = new ByteArray();
bytes.writeObject(theObjectToEncrypt);

var key:ByteArray = Hex.toArray(someKey);
var md5:MD5 = new MD5();
key = md5.hash(key);

var pad:IPad = new PKCS5();
var aes:ICipher = Crypto.getCipher("simple-aes-128-cbc", key, pad);
pad.setBlockSize(aes.getBlockSize());
aes.encrypt(bytes);

fileStream.writeBytes(bytes);
fileStream.close();

在这里我如何解密并从文件中取回我的对象​​:

var bytes:ByteArray = new ByteArray();
var fileStream:FileStream = new FileStream();
fileStream.open(theFileWithEncryptedObject, FileMode.READ);
fileStream.readBytes(bytes);
fileStream.close();

var key:ByteArray = Hex.toArray(someKey);
var md5:MD5 = new MD5();
key = md5.hash(key);

var pad:IPad = new PKCS5;
var aes:ICipher = Crypto.getCipher("simple-aes-128-cbc", key, pad);
pad.setBlockSize(aes.getBlockSize());
aes.decrypt(bytes);

var theObjectDecrypted:Object;
bytes.position = 0;
theObjectDecrypted = bytes.readObject();

希望这可以帮助。

于 2013-02-12T17:20:42.453 回答