23.7.使用加密的本地存储区

23.7.1.问题
我想把数据存储到用户硬盘上且不可被其他程序所读写。
23.7.2.解决办法
使用AIR 程序中加密的本地存储区以加密存储信息。
23.7.3.讨论
当一个AIR程序被安装后,一个加密的本地存储区被创建,用于存储一些需要保密的信息。

使用Windows的Data Protection API (DPAPI) 和Mac OS X的密匙链for AIR applications on Windows and Keychain for those on Mac OS X, 数据被加密且只有在相同的安全沙箱中可用,加密本地存储区最大空间为10MB。

数据被存储在哈希表中,你可以使用键字符串设置和读取加密本地存储区中的数据。数据被序列化为ByteArray对象,这样可以存储大多数内建对象类型以及通过类别名注册的自定义对象。通过flash.data.EncryptedLocalStore类的静态方法访问加密的本地存储区。getItem和setItem方法通过一个键字符串读取相关联的数据,你也可以通过键字符串删除相关联的数据或使用EncryptedLocalStore类的方法清除整个存储区数据。

下面的例子使用EncryptedLocalStore存储用户数据:
+展开
-XML
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml"
layout="verticalwindowComplete="completeHandler();">

<mx:Script>
<![CDATA[
import com.carlcalderon.arthropod.Debug;
import com.lxy.flexcookbook.UserData;
[Bindable]
public var userData:UserData;
private function submitHandler():void {
userData = new UserData(firstField.text,lastField.text);
var bytes:ByteArray = new ByteArray();
bytes.writeObject(userData);
EncryptedLocalStore.setItem("user" ,bytes);
views.selectedChild = userCanvas;
}
private function completeHandler():void {
var user:ByteArray = EncryptedLocalStore.getItem("user" );
if(user != null){
userData = user.readObject() as UserData;
views.selectedChild = userCanvas;
}
}

]]>
</mx:Script>
<mx:ViewStack id="viewswidth="300height="300"
backgroundColor="0xeeeeee">

<mx:Form id="inputForm">
<mx:FormItem label="First Name:">
<mx:TextInput id="firstField" />
</mx:FormItem>
<mx:FormItem label="Last Name:">
<mx:TextInput id="lastField"/>
</mx:FormItem>
<mx:Button label="submitclick="submitHandler();"/>
</mx:Form>
<mx:VBox id="userCanvas">
<mx:Label text="Hello,"/>
<mx:HBox>
<mx:Label text="{userData.firstName}"/>
<mx:Label text="{userData.lastName}"/>
</mx:HBox>
</mx:VBox>
</mx:ViewStack>
</mx:WindowedApplication>

当应用程序运行完成初始化布局后,completeHandler方法被调用检测加密本地存储区和user相关的数据,如果有,一个ByteArray对象被返回并被反序列化回溯为UserData对象。如果没有相关数据,则用户可以输入并提交数据到存储区,在submitHandler方法中,用户数据被序列化,存到ByteArray对象,并通过ByteArray.writeObject方法和一个键字符串关联后存储到存储区,通过ByteArray方法任何对象都可被序列化,例如UTF-编码的字符串,Boolean值,numbers,都可以被存储到加密的本地存储区中。

加支付宝好友偷能量挖...


评论(0)网络
阅读(124)喜欢(0)flash/flex/fcs/AIR