套件 | flash.data |
類別 | public class EncryptedLocalStore |
繼承 | EncryptedLocalStore Object |
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0 |
ELS 資料無法在應用程式之間共用。ELS 的用途是,讓應用程式可以輕鬆地儲存重新建立的項目 (例如登入憑證) 和其他私有資訊。系統不會將 ELS 資料視為永久資料,請參閱下面的「加密本機儲存區的限制」和「使用 ELS 的最佳作法」。
AIR 描述檔支援:AIR for TV 裝置不支援此功能。您可以使用 EncryptedLocalStore.isSupported
屬性測試執行階段的支援狀況。如需有關跨多個描述檔之 API 支援的詳細資訊,請參閱 AIR 描述檔支援。
AIR 為每個安裝在使用者電腦或裝置上的 AIR 應用程式,提供加密的本機儲存區 (ELS)。這可讓您以加密格式儲存和擷取儲存在使用者本機硬碟中的資料,而其他使用者則難以解譯這類加密的資料。每個 AIR 應用程式都擁有獨立的加密本機儲存區,而且每個 AIR 應用程式都會針對電腦上每個使用者帳戶使用獨立的加密本機儲存區。
您可以使用加密本機儲存區快取機密資訊 (例如,網路服務的登入認證),確保其安全性。ELS 很適合用來儲存必須對其他使用者保密的資訊。但是,它無法保護在相同使用者帳戶下執行之其他處理程序的資料。因此,不適用於保護機密的應用程式資料,例如 DRM 或加密金鑰。
AIR 在 Windows 中會使用 DPAPI (在 Mac OS 及 iOS 中使用 KeyChain,在 Linux 中則使用 KWallet) 使加密本機儲存區與每個應用程式及每個使用者產生關聯。加密本機儲存區會使用 AES-CBC 128 位元加密。
在 Android 上,不會加密 EncryptedLocalStorage 類別儲存的資料。資料改由作業系統提供的使用者層級安全功能來保護。Android 作業系統會針對每個應用程式指定個別的使用者 ID。應用程式只能存取它們自己的檔案與在公用位置建立的檔案 (例如抽取式記憶卡)。請注意,在根層級的 Android 裝置上,以根權限執行的應用程式「可以」存取其他應用程式的檔案。因為根層級的裝置不像非根層級的裝置,會在加密的本機儲存區提供高階的資料保護功能。
只有 application 安全執行程序中的 AIR 應用程式內容才能存取加密本機儲存區中的資訊。
如果您更新 AIR 應用程式,更新的版本會保留加密本機儲存區中任何現有資料的存取權,除非您執行下列動作:
- 以
stronglyBound
參數設為true
來加入這些項目。 - 您已經從 AIR 3.2 命名空間升級至 AIR 3.3 (在 AIR 3.2 與 AIR 3.3 之間,Mac OS 和 Windows 的加密本機儲存區實體位置已變更)
- 現有版本及更新版本都是在 AIR 1.5.3 之前發佈,而且更新會以移轉簽章來簽署
加密本機儲存區的限制
加密本機儲存區中的資料受到使用者作業系統帳戶憑證的保護。其他實體除非以該使用者身份登入,否則無法存取儲存區的資料。不過,對於驗證的使用者所執行之其他應用程式存取的資料,並無法保護其安全。因此,應用程式希望保持機密、不受到使用者存取的資料 (例如授權或數位版權管理的金鑰) 並不安全。ELS 並不是儲存這類資訊的適當位置。這裡僅適合儲存使用者的私人資料,如密碼。
ELS 的資料可能會因各種原因遺失。例如,使用者可能會解除安裝應用程式並刪除加密檔案。或者,發行者 ID 可能會在更新時遭到變更。因此,應該將 ELS 視為私人快取,而不是永久的資料儲存區。
不建議使用 stronglyBound
參數,不應將它設為 true
。將此參數設為 true
不會對資料提供任何額外的保護。同時,應用程式每次更新時,都會喪失資料的存取權,即使發行者 ID 不變也一樣。
如果儲存的資料超過 10 MB,加密的本機儲存區效能可能變慢。
解除安裝 AIR 應用程式時,解除安裝程式不會刪除加密本機儲存區中的資料。
使用 ELS 的最佳作法
使用 ELS 的最佳作法包括:
- 使用 ELS 儲存密碼等機密使用者資料 (將
stronglyBound
設為false
) - 不要使用 ELS 儲存 DRM 金鑰或授權憑證等應用程式機密
- 可讓應用程式在遺失 ELS 資料時,重新建立儲存在 ELS 的資料。例如,在需要時提示使用者重新輸入帳戶憑證。
- 請勿使用
stronglyBound
參數。 - 如果您將
stronglyBound
設為true
,請勿在更新期間移轉儲存的項目。而是在更新之後重新建立資料。 - 僅儲存相當少量的資料。針對較大量的資料,請使用加密的 AIR SQL 資料庫。
加密本機儲存區中的項目都是藉由字串加以識別。所有項目都會儲存為位元組陣列資料。
屬性 | 定義自 | ||
---|---|---|---|
constructor : Object
類別物件的參照或是特定物件實體的建構函數。 | Object | ||
isSupported : Boolean [靜態] [唯讀]
如果目前的平台支援 EncryptedLocalStore 類別,則 isSupported 屬性會設為 true,否則會設為 false。 | EncryptedLocalStore |
方法 | 定義自 | ||
---|---|---|---|
[靜態]
對應於指定名稱的資料。 | EncryptedLocalStore | ||
指出物件是否有已定義的指定屬性。 | Object | ||
指出 Object 類別的實體是否位於指定為參數的物件原型鏈中。 | Object | ||
指出指定的屬性是否存在,以及是否可列舉。 | Object | ||
[靜態]
從加密本機儲存區中移除具有指定之名稱的項目。 | EncryptedLocalStore | ||
[靜態]
清除整個加密本機儲存區,並刪除所有資料。 | EncryptedLocalStore | ||
[靜態]
在指定名稱下儲存 ByteArray 物件。 | EncryptedLocalStore | ||
為迴圈作業設定動態屬性的可用性。 | Object | ||
傳回代表此物件的字串,根據地區特定慣例進行格式化。 | Object | ||
會傳回指定之物件的字串形式。 | Object | ||
會傳回指定之物件的基本值。 | Object |
isSupported | 屬性 |
getItem | () | 方法 |
public static function getItem(name:String):ByteArray
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0 |
對應於指定名稱的資料。
如果指定名稱的項目不存在,此方法便會傳回 null
。
參數
name:String — 加密本機儲存區中的項目名稱。
|
ByteArray — ByteArray 資料。如果提供的 name 不含資料,此方法便會傳回 null 。
|
擲回值
ArgumentError — name 值為 null 或空字串。
|
removeItem | () | 方法 |
public static function removeItem(name:String):void
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0 |
從加密本機儲存區中移除具有指定之名稱的項目。
參數
name:String — 加密本機儲存區中的項目名稱。
|
擲回值
ArgumentError — name 值為 null 或空字串。
|
reset | () | 方法 |
setItem | () | 方法 |
public static function setItem(name:String, data:ByteArray, stronglyBound:Boolean = false):void
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0 |
在指定名稱下儲存 ByteArray 物件。
參數
name:String — 加密本機儲存區中的項目名稱。
| |
data:ByteArray — 資料。
| |
stronglyBound:Boolean (default = false ) — (不建議使用) stronglyBound 參數應該設定為 false (預設值)。如果設定為 true ,且修改了任何應用程式檔案,則無法擷取儲存的項目。例如,如果使用者安裝應用程式的更新,更新的應用程式無法讀取任何之前已寫入加密本機儲存區之強式繫結資料。
|
擲回值
ArgumentError — name 值為 null 或空字串。
| |
ArgumentError — data 值為 null 。
|
var str:String = "Bob"; var bytes:ByteArray = new ByteArray(); bytes.writeUTFBytes(str); EncryptedLocalStore.setItem("firstName", bytes); var storedValue:ByteArray = EncryptedLocalStore.getItem("firstName"); trace(storedValue.readUTFBytes(storedValue.length)); // "Bob" EncryptedLocalStore.removeItem("firstName");
Tue Jun 12 2018, 03:47 PM Z