初めまして、お世話になります。
###使用言語
swift2.0
###質問内容
AES-128で暗号化されているファイル(png、mp4など)を復号する方法は
ありますでしょうか。
自身で調べてみた結果、
文字列を暗号化、復号する方法は実現できそうですが
ファイルを取り扱う方法がわかりません。
些細な事でも構いませんので、アドバイス等ご教授頂けると幸いです。
宜しくお願いいたします。
[追記]
上記はCryptoSwift(その他ライブラリ)を使用し検証いたしました。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
以下の流れで復号できるはずです。
- ファイルをNSDataで読み込む
- NSDataを[UInt8]に変換
- [UInt8]をAES復号
ただし、元のファイルの暗号化に使用された以下の情報が必要です。
- モード(ECB,CBC, ...)
- IVの有無,値
- パディング方式
参考: [暗号化]ブロック暗号とは(AES/DES/Blowfish PKCS5Padding ECB/CBC IV) - [技術資料 + 技術資料] ぺんたん info
実装サンプル抜粋
AESの暗号化/復号のサンプル。
参考: CryptoSwiftから抜粋
let input: [UInt8] = [0,1,2,3,4,5,6,7,8,9] let key: [UInt8] = [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00] let iv: [UInt8] = AES.randomIV(AES.blockSize) do { let encrypted: [UInt8] = try AES(key: key, iv: iv, blockMode: .CBC).encrypt(input, padding: PKCS7()) let decrypted: [UInt8] = try AES(key: key, iv: iv, blockMode: .CBC).decrypt(input, padding: PKCS7()) } catch AES.Error.BlockSizeExceeded { // block size exceeded } catch { // some error }
NSDataと[UInt8]の相互変換のサンプル。
参考: CryptoSwiftから抜粋
let data: NSData = NSData(bytes: [0x01, 0x02, 0x03]) let bytes:[UInt8] = data.arrayOfBytes()
ファイルをNSDataとして読み込むサンプル。
参考: File IO in Swift 2 | Apple Developer Forums
if let data = NSData(contentsOfFile: "/tmp/xxx.png") { //... }
投稿2015/11/16 00:31
総合スコア13
0
これでどうでしょうか?
CryptoSwift
Objective-CのCommonCryptoを使う。
■参考URL
Issue using CCCrypt (CommonCrypt) in Swift
これのベストアンサー。operationをDecryptにすれば復号できる。
NSData+AES.h
NSDataを拡張。(Objective-C用)
投稿2015/11/13 01:20
編集2015/11/13 02:40総合スコア16731
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/11/13 01:32
2015/11/13 02:41
2015/11/16 00:08
2015/11/16 00:31
2015/11/16 05:47
2015/11/16 06:17
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。