`
txf2004
  • 浏览: 7042193 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

【flex加密】应用程序加密1-模拟flash.data.EncryptedLocalStore

阅读更多

应用程序加密1-模拟线上加密商店

在RIA的世界里,flex和air确实已经起飞了,随着财富500强企业逐渐采用flex技术实现ria已经各种企业层次的应用开始出现,应用程序和数据安全问题应该逐渐引起flex/air程序员的注意,保密的级别应该和项目的需求紧密相关。例如如果你想开发的是开源的支持广告的面向大众的应用程序,为了尽可能多的获取用户加密的级别就应该相应的低,同时系统花费在认证用户上的时间要尽可能的小。另一方面如果你是为企业政府开发内部应用的面板程序,那么你可能要采用尽量高的加密级别。

在这一系列的三篇关于如何加密Flex应用程序的文章中,我们首先会讲述如何在Flex应用程序中采用加密存储技术加密一个Flex应用程序。在第二篇文章中我们会尝试使用接口和最小化的加密来对SWC文件进行保护,这个SWC文件正是我们要出售的商业库。在最后的文章中我们会去了解一下NitroLM.com,这是一个商业的API专门从事用户注册认证管理,以及企业级的加密技术


在Adobe最新发布的AIR1.0版本中,他们提供了向磁盘存储加密数据的API, flash.data.EncryptedLocalStore类,该类调用WINDOWS DPAI或者是MAC的KEYCHAIN来通过ByteArray数组来存储数据,很不幸的是,在Flex里面我们享受不到这项便利,在这一片教程里面我们会尝试着模拟这样的一个类来存储加密数据

我们要做的第一件事情就是到网络上去下载一个flex的加密库方便使用,这里使用的是Henri创建的AS3Crypto (http://crypto.hurlant.com),我推荐下载源代码版本,这样你就可以方便的调试并且能够了解整个加密进程是如何进行的。

在这个例子中(可以查看源代码)用户可以在应用程序向WEB SERVICE提请验证过程中,保存自己的用户名和密码,当然这两个数据的保护不是天衣无缝的,因为数据和随机生成的KEY是保存在一起的,至于如何将KEY模糊的放在服务器或者用户端,还是两者协商使得KEY的保护更加安全,在此就留作练习了。

FlexEncryptionExample1 example

下面我大概的讲述一下代码:我们有两个主要的方法,encryptedLoad() 和encryptedSave(). encryptedSave().产生随机的16位KEY然后使用AES-128算法对我们的用户名和密码进行破解,然后将数据保存到BYTE ARRAY

 

private function encryptedSave():void
{
//创建和获得共享对象
var so:SharedObject = SharedObject.getLocal("encryptedStore");

//产生随机的KEY
var key:ByteArray = new ByteArray();
var random:Random = new Random();
random.nextBytes(key, 16);

//将我们的数据加密后保存到ByteArray
var cleartextBytes:ByteArray = new ByteArray();
cleartextBytes.writeUTF(username.text);
cleartextBytes.writeUTF(password.text);

//使用128位AES算法加密
var aes:ICipher = Crypto.getCipher("aes-ecb", key, Crypto.getPad("pkcs5"));
aes.encrypt(cleartextBytes);

//将数据和KEY一起保存
//Note: 注意通常你出于安全考虑你不会这样做
// 当然前面提到了,这项工作就留作练习了
// security and/or obvuscation.
var dataToStore:ByteArray = new ByteArray();
dataToStore.writeBytes(key);
dataToStore.writeBytes(cleartextBytes);

//将数据保存进共享对象
so.data.ws_creds = dataToStore;
so.flush();

//清空域
username.text="";
password.text="";
}

encryptedLoad()读取我们保存的KEY然后将其加入ByteArray,username和password解密后会被分别解析到各自的域中

 

private function encryptedLoad():void
{
//从共享对象获取保存的数据
var so:SharedObject = SharedObject.getLocal("encryptedStore");

var dataToLoad:ByteArray = so.data.ws_creds;

//读取键值
var key:ByteArray = new ByteArray();
dataToLoad.readBytes(key, 0, 16);

//读取密文
var encryptedBytes:ByteArray = new ByteArray();
dataToLoad.readBytes(encryptedBytes);

//解密
var aes:ICipher = Crypto.getCipher("aes-ecb", key, Crypto.getPad("pkcs5"));
aes.decrypt(encryptedBytes);

encryptedBytes.position = 0;

username.text = encryptedBytes.readUTF();
password.text = encryptedBytes.readUTF();
}

真心的希望这篇文章对你有用

  • comments: 2



Encryption in Flex Applications 1 - Simulate EncryptedLocalStore

<!-- AddThis Bookmark Button BEGIN --> AddThis Social Bookmark Button <!-- AddThis Bookmark Button END -->

In the RIA world, Flex and AIR applications have really taken off. With that has come increased adoption by Fortune 500 companies and new enterprise-level apps taking advantage of the Adobe Flash platform. Application and data security should always be a concern of the Flex/AIR developer. The level of paranoia the developer should implement must be weighed against the goals of the project. For example, if you’re developing an open source or advertising-supported application intended for a wide public audience, you probably want to implement fairly minimal security measures in order to reach the widest audience and limit the amount of time you spend managing users in the system. On the other hand, if you’re being contracted to write a dashboard application for a large company or government for internal use, you’d probably want to implement security measures at the high-end of the spectrum.

In this series of three articles on the topic of Encryption in Flex Applications, we’ll first cover a basic data encryption and storage example in a Flex application. In article two, we’ll look at using an interface and doing some minimal encryption on a SWC file to protect an example commercial library we want to sell. In the final installment, we’ll take a look at using some of the features of NitroLM.com which is a commercial API for user registration, management, and entire application encryption.


In Adobe’s newly-released version of AIR 1.0, they provide an API for storing encrypted data to the hard drive. The flash.data.EncryptedLocalStore class uses the Windows DPAPI or KeyChain on MacOS to store and retrieve encrypted data as a ByteArray. Unfortunately, this capability isn’t available to us in a Flex application. In this example, I’ll demonstrate creating similar functionality by encrypting data stored in a local SharedObject.

The first thing we need is to download an encryption library to use in our Flex application. I’m using AS3Crypto (http://crypto.hurlant.com) created by Henri Torgemane. I recommend downloading the source code so you can debug easier and see how the encryption is working.

In this example (view-source enabled), the user can save a username and password between runs of the application to be used by a web service. It’s not totally secure since the randomly generated key is stored along with the encrypted data. I’ll leave it as an exercise for the reader to come up with clever ways to obfuscate the key or use alternative server-side repositories that are more secure.

FlexEncryptionExample1 example

Let’s walk through the code. We have two main methods, encryptedLoad() and encryptedSave(). encryptedSave() generates a random 16 byte key, and runs the AES-128 encryption algorithm on our username and password that we’ve packaged into a ByteArray.

 

private function encryptedSave():void
{
//create or retrieve the current shared object
var so:SharedObject = SharedObject.getLocal("encryptedStore");

//generate a random key
var key:ByteArray = new ByteArray();
var random:Random = new Random();
random.nextBytes(key, 16);

//store our data to encrypt into a ByteArray
var cleartextBytes:ByteArray = new ByteArray();
cleartextBytes.writeUTF(username.text);
cleartextBytes.writeUTF(password.text);

//encrypt using 128b AES encryption using a random key
var aes:ICipher = Crypto.getCipher("aes-ecb", key, Crypto.getPad("pkcs5"));
aes.encrypt(cleartextBytes);

//store key along with the data to decrypt
//Note: normally you'd never do this for security reasons,
// but I'll leave it to the reader to handle additional
// security and/or obvuscation.
var dataToStore:ByteArray = new ByteArray();
dataToStore.writeBytes(key);
dataToStore.writeBytes(cleartextBytes);

//save the blob of encrypted stuff in the SharedObject
so.data.ws_creds = dataToStore;
so.flush();

//clear out the fields
username.text="";
password.text="";
}

encryptedLoad() reads in our key and uses it to decrypt the rest of the ByteArray. The values are then loaded into their respective form fields from the decrypted ByteArray.

 

private function encryptedLoad():void
{
//create or retrieve the current shared object
var so:SharedObject = SharedObject.getLocal("encryptedStore");

var dataToLoad:ByteArray = so.data.ws_creds;

//read in our key
var key:ByteArray = new ByteArray();
dataToLoad.readBytes(key, 0, 16);

//read in our encryptedText
var encryptedBytes:ByteArray = new ByteArray();
dataToLoad.readBytes(encryptedBytes);

//decrypt using 128b AES encryption
var aes:ICipher = Crypto.getCipher("aes-ecb", key, Crypto.getPad("pkcs5"));
aes.decrypt(encryptedBytes);

encryptedBytes.position = 0;

username.text = encryptedBytes.readUTF();
password.text = encryptedBytes.readUTF();
}

Hopefully with this example, you can start to see some of the possibilities for encrypting your data using Adobe Flex/AIR.

分享到:
评论

相关推荐

    S32R274-FlexCAN-S32DS.zip_FlexCAN_S32R374_olders2t_汽车_汽车电子

    1. **FlexCAN简介**:FlexCAN是一种灵活的CAN控制器,支持CAN 2.0A、CAN 2.0B和CAN FD(Flexible Data-Rate)协议,能够处理不同速率的数据传输。 2. **CAN总线**:CAN总线是汽车电子系统中的标准通信协议,通过多...

    blazeds完整压缩包blazeds.war,ds-console.war,samples.war

    Blazeds是一个强大的Java服务器端技术,主要用于构建富互联网应用程序(Rich Internet Applications,简称RIA)。它结合了Adobe Flex客户端技术和Java服务器端技术,提供了一种高效的数据通信解决方案,使得Flex应用...

    flex-messaging-4.7.3最新版本的jar

    Flex Messaging是Adobe Flex框架的一部分,它提供了一个强大的实时通信平台,允许客户端(通常是Flex应用程序)与服务器进行双向数据交换。4.7.3版本是这个组件的一个更新,它可能包含了性能提升、错误修复以及新的...

    flex-php-des加密解密包

    Flex-PHP-DES 加密解密包是一款专为PHP开发者设计的工具,它实现了DES(Data Encryption Standard)加密算法,并提供了与Adobe Flex应用程序之间的数据安全交互。DES是一种广泛使用的对称加密算法,常用于保护敏感...

    基于单片机与fpga的等精度频率计的设计单片机部分-本科论文.doc

    知识点1:单片机的应用 * 单片机是计算机系统的核心组件之一, Responsible for controlling and processing data。 * 在该设计中,AT89C51单片机作为系统的主控部件,实现整个电路的信号控制、数据运算处理等功能...

    EFR32FG1-DataSheet-876878.pdf

    - **Flash程序存储器**:用于存储程序代码和非易失性数据。 - **RAM内存**:为应用程序提供运行时存储空间。 ##### 能量管理 - **能量管理单元**:提供多种低功耗模式。 - **电源监控器**:包括电压监测、电源复位...

    flex C# 基于socket 通讯 应用程序源码

    - BlazeDS或LiveCycle Data Services:Adobe提供的中间件,允许Flex应用程序与Java或.NET服务进行数据交换,包括Socket通信。 2. **C#服务端开发**: - `System.Net.Sockets.Socket`类:用于创建和管理Socket连接...

    What are Flex Data Services.

    ### Flex Data Services (FDS) 简介 Flex Data Services (FDS),也被称为 Flex Data Services 2 或 FDS2,在 Adobe Flex 开发框架中扮演着至关重要的角色。它并非传统的服务器插件,而是作为一个独立的 Web 应用...

    Flex中文帮助-1

    Flex是Adobe公司推出的一种开源框架,主要用于构建富互联网应用程序(Rich Internet Applications,RIA)。它基于ActionScript编程语言和MXML标记语言,为开发者提供了一种高效、强大的方式来创建具有丰富用户界面的...

    linux上源码安装apache2.4 nginx1.2 php5.3.10 mysql5.3

    sudo apt-get install build-essential binutils cpp fetchmail flex gcc libarchive-zip perl libc6-dev libpcre3 libpopt-dev lynx m4 make ncftp nmap perl perl-modules unzip zip zlib1g-dev autoconf automake...

    上一篇的flex的远程对象调用,flex和spring集成分页的jar和截图

    标题中的“flex的远程对象调用”指的是在Adobe Flex应用程序中使用Remote Object(RO)服务进行远程通信的技术。Flex是一个开源的、基于ActionScript的框架,用于构建富互联网应用程序(RIA)。通过RO服务,Flex应用...

    Flex Socket与C#通信

    Flex是Adobe开发的一种富互联网应用程序(RIA)开发框架,基于ActionScript 3.0,它可以创建具有动态图形和交互性的Web应用。Socket接口是Flex中用于网络通信的基础组件,允许客户端与服务器进行双向数据流通信。在...

    flex-java互相整合及其示例

    Flex是Adobe公司开发的一种开放源代码的、基于XML的标记语言,主要用于创建富互联网应用程序(RIA)。它允许开发者构建交互性强、视觉效果丰富的用户界面,常用于Web应用中。Java则是一种广泛使用的面向对象的编程...

    Flex 应用,BlazeDS通信

    Flex是一种开源的富互联网应用程序(RIA)开发框架,由Adobe公司提供,主要用于构建交互性强、用户体验优秀的Web应用。它基于ActionScript编程语言和Flash Player运行环境,能够创建动态、响应式的用户界面。BlazeDS...

    lcds.rar_LCDS_LiveCycle Data Servi_LiveCycleDataService_flex_fle

    LCDS(LiveCycle Data Services),原名为Flex Data Service(FDS),是Adobe提供的一款强大的数据服务解决方案,专门针对Flex和Flex应用的后端数据交互。它建立在Java平台之上,同时也支持ColdFusion版本,为Flex...

    flex_lcds_java.rar_flex

    1. **Flex基础**:Flex是一种基于ActionScript的开发环境,用于创建交互式、图形丰富的Web应用程序。它使用MXML和ActionScript语言,支持事件驱动和面向对象编程。 2. **LiveCycle Data Services (LCDS)**:LCDS是...

    FlexDemo

    ActionScript 3.0是Flash Platform的核心编程语言,广泛用于开发富互联网应用程序(RIA)。Flex是基于ActionScript 3.0的开源框架,它提供了一套组件库和开发工具,简化了RIA的构建过程。 1. **ActionScript 3.0...

    Flex聊天程序

    9. **安全性**:考虑到聊天应用通常涉及用户隐私,Flex聊天程序需要考虑安全措施,如数据加密传输、身份验证和访问控制等,以保护用户信息的安全。 10. **部署和优化**:完成开发后,Flex应用程序需要打包成SWF文件...

    Flex BlazeDS通信

    Flex BlazeDS通信是一种在富互联网应用程序(RIA)中实现客户端与服务器端数据交互的技术。它主要涉及Adobe Flex作为前端开发工具,以及BlazeDS作为后端数据服务的中间件。BlazeDS是Adobe官方推出的一个开源项目,...

    flex聊天程序客户端

    Flex聊天程序客户端是一款基于Adobe Flex技术构建的在线通信应用程序,它允许用户进行实时的文字、音频或视频交流。Flex是ActionScript 3.0的一个开发框架,主要用于构建富互联网应用程序(Rich Internet ...

Global site tag (gtag.js) - Google Analytics