LoginSignup
4
2

More than 5 years have passed since last update.

iOSで暗号化した文字列をPythonで復号する

Last updated at Posted at 2017-03-07

はじめに

今回の暗号技術については私の勉強という一貫というものも含まれていますので、間違い、こうすればもっとよくなる等あればコメント等よろしくお願いします:bow:

環境

  • Xcode8.2.1
  • macOS Sierra
  • iOS10 (on Simulator)
  • Swift3
  • CocoaPods 1.1.1
  • Python3.6

暗号化

今回はAESを使った暗号化を使用します。
いくらHTTPS通信であれMITM対策指定ない限りパスワードなどの送受信は平文で見えちゃいますからね。せめて暗号化しましょう。

実装はiOS側でします。

ライブラリ

  • CryptoSwift 0.6.7

適当にプロジェクトを作る
ライブラリのインストール

$ pod init
Podfile
pod 'CryptoSwift', '~> 0.6'
$ pod install

サンプルソース

Hoge.swift
import Foundation
import CryptoSwift  // ここを書いた時点で「⌘+B」しておくべきかも

class Hoge: NSObject {
    func hoge(_ text: String) {
        let bytes = [UInt8](text.utf8)
        // AESの鍵方式に合わせて各自変更
        let key = [UInt8]("12345678901234567890123456789012".utf8)
        let iv: [UInt8] = AES.randomIV(AES.blockSize)

        do {
            let aes = try AES(key: key, iv: iv, blockMode: .CBC)
            let encrypted = try aes.encrypt(bytes)
            let encryptedData = Data(bytes: encrypted, count: encrypted.count)
            let sendData = NSMutableData(bytes: iv, length: iv.count)
            sendData.append(encryptedData)
            let sendDataBase64 = sendData.base64EncodedString(options: .lineLength64Characters)
            print("Encrypt: \(sendDataBase64)")
            // Encrypt: rLKCA1hNmqu2dq+08E9mK2lBlspQN0+CYBkWkCQz7IvHhh+qbfysc26Oh1SS4Adq
        } catch let error {
            print("Error: \(error)")
        }
    }
}

というような感じで暗号化は一応できたかと思います。
今回使う文字列は「 Lorem ipsum dolor sit amet 」です。
あとはAlamofireでサーバに飛ばすなりなんなりする。割愛します。

復号

基本的に暗号化が必要そうなサーバサイド作る時は私はDjangoを使っていますが、Django特有のところは触らないので悪しからず...

ライブラリ

  • Simple-AES-Cipher 1.0.0

とても簡単に暗号化及び復号処理が書けるのでおすすめです。

サンプルソース

decrypt.py
from simple_aes_cipher import AESCipher


encrypt = 'rLKCA1hNmqu2dq+08E9mK2lBlspQN0+CYBkWkCQz7IvHhh+qbfysc26Oh1SS4Adq'
cipher = AESCipher('12345678901234567890123456789012')
plain_text = cipher.decrypt(encrypt)

print(plain_text)  # Lorem ipsum dolor sit amet

無事復号できたようです:clap::clap::clap:

最後に

こうしたらいいぞぉ〜とかあればドシドシコメントや編集リクエストいただければと思います!

4
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2