cocos2dx-暗号化、複合化その3

まだ続くのかって?続くさ!

だって暗号化難しいんだもん(´;ω;`)ブワッ

今のところ前回流用したAES128変換を使わせてもらってるんだけど

どうもパディングに時間をとられてしまったのでメモがてらに。

OPENSSLの標準Padddingですが検索をかけるとPKCS5なようです…調べたけど書いてる記事がばらばらで確定には怪しいですが。

一応NoPaddingも設定できるようです

EVP_CIPHER_CTX_set_paddingをつかえばですが…。

 

それと、Paddingのタイミングを

原文→AES変換→足りない分をパディング

だと思っていたのですが実際は

原文→足りない分をパディング→AES変換

だったようです(Oh My God...)

なのでEVPでいえばUpdateないでPaddingされるのでパディングを切るときはUpdateより前にしないといけないとか…うへぇ…。

 

で、ひとつきになったんだけど…

じゃぁEVP_EncryptFinalって何のためにいるの(゚д゚lll)

EVP_EncryptUpdateの時点で変換も終わってるんだし…

謎が謎を読んできますね…

 

それと、筆者はPKCS7が使いたかったので

EVP関数群に渡す前のデータをパディングする関数をつくっちゃいました(ゝω・) テヘ

PKCS5とPKCS7の違いはパディングする際のサイズ範囲だそうです。

 

PKCS5が8のブロック長固定(Paddingする分のデータが8で割った際の余り分になる)

PKCS7はブロック長が可変で0~256までになります

 

パディングには他にもいくつか方法はあるので興味がある人は調べてみると面白いかもですね!(もちろん暇なときに)

cocos2dx-暗号化、複合化その2

cocos2dx-暗号化、複合化 - 酒の備忘録

と以前に書いていたやつの続きです。

アンドロイドで作業する段階になってさぁ暗号化しようと思いたったのですが

結局JavaとかObjectiveCで切り分けるのめんどくさくなったので

OpenSSLで書くことにしました。

 

でもせっかく実装してたのでCCCrypto内部にandroidうまく組み込めないかな~としましたがうまくいきませんでした…

というか…更新が止まってるのってやっぱり作るのめんどくさかったのかなぁ…

f:id:blue_white_sake:20160525232500j:plain

気持ちはよくわかる( ー`дー´)キリッ

(我ながらなんて懐かしいものをだすのだろうか…)

 

というわけでOpenSSLの使い方を書こうかな~なんて思ってたら

つい数日前にいつも(一方的に)お世話になってる

たそがれブランチさんのところでまとめていただいてました。

こんなにグッドなタイミングで記事更新が来るなんて素敵ッ

brbranch.jp

かなりわかりやすいですね!ワーイヽ(゚∀゚)メ(゚∀゚)メ(゚∀゚)ノワーイ

なのであえて書くことはないですね←ぉぃ

cocos2dx-OpenSSLの問題…

ここ数日で全身が筋肉痛で大変なこの頃…

日ごろから運動しないといざってときに動かないもんですね。

 

さて、今日は仕事でAES暗号化の続きを調べていた時に見つけたことなのですが

opensslが今(2016/05/16時点)の最新であるver3.11より古いものだと

今年の7/11には対応されなくなりGoogleにアプリの更新がブロックされるようです/(^o^)\ナンテコッタイ

support.google.com

対処方法は簡単でcocos2dxのバージョンを最新にすれば解決です(`・ω・´)

環境設定とかが変わると怖いな~とかv2系を使っていらっしゃる方は

下記のフォルダ内にあるandroidのフォルダを更新してあげてください。

ver2

/cocos2dx/platform/third_party/android/prebuilt/libcurl/libs/x86/libcurl.a
/cocos2dx/platform/third_party/android/prebuilt/libcurl/libs/armeabi/libcurl.a
/cocos2dx/platform/third_party/android/prebuilt/libcurl/libs/armeabi-v7a/libcurl.a

 

ver3

/cocos2d/external/curl/prebuilt
/cocos2d/external/curl/include

 

一応仕事で使ってる3系の類で試してみるのでできなかったらまた記事を修正しますです(笑)

 

参考サイト

【cocos2dx】OpenSSLのセキュリティ問題への対処方法 | albatrus.com

cocos2dx-暗号化、複合化

仕事でネットワークを触ることになったので~

その時のcocos2dxでの暗号化のやり方を忘れないようにメモメモします。

おそらくcocosでのAESやbase64なんかで暗号化をCCCryptoが出てきます。

 

GitHub - dualface/cocos2d-x-extensions: Extensions for cocos2-x.

上記のGitから落とせるんですがこれがかなり使い勝手がいい…

AES,base64md5,sha1なんかが使えます。

それ以外にもいくつか機能をexampleで置いてもらってますが今回は暗号化と複合化さえできればよかったのでCrypt関係の処理だけを抜き取りました(`・ω・´)ゞ

cocos2dxをさわたことのある人はCCとついてるだけできっと勘づいているとおもいますが~

この子、v2世代の産物です。

個人的に探してみましたがわざわざv3系にしました~などの記事は見当たりませんでしたので~少しだけ中を変えないと動いてくれません。

と、言いましたがそこまで変えるところもないのでご安心を( ー`дー´)キリッ

 

とりあえず使うのは以下のファイル類なのでそれだけ抜粋します。

・cocos2d-x-extensions/extensions/crypto:フォルダ下全て

cocos2d-x-extensions/extensions/platform/ios/CCCrypto_objc.mm

とりあえずほしいものだけを下記みたいに置いておけばいいと思います。

 

f:id:blue_white_sake:20160507012948p:plain

cocosのバージョンが最新じゃないけど(゚ε゚)キニシナイ!!

とりあえずCCCrypto.hの内のincludeが古いもののままなので

#include "cocos2dx_extensions.h" → #include "cocos-ext.h"

にしたらとりあえずコード的なエラーはなくなるはずです。

 

あとは対応しているAndroid.mkにいつものを追加してあげればOKです!

(cocosのエンジン自体にいれたらその内部にあるものを~…デス。言うまでもないですが)

Xcodeでの開発ならそっちもBuildPhasesにちゃんと追加してあげれば問題なく動作するはずです。

 

肝心の使い方は説明するよりexampleの中身を見たほうが早いと思います。

CCryptSceneをみればたぶん大方わかります。

 

今度ネット環境のリクエスト等なども勉強しなおしたほうがいいかもですね…。

 

2016/05/25追記

完全に書き忘れてましたがこいつandroid対応できてませんw

私はandroidも一緒に…というかマルチプラットフォームのためにcocosつかってるんじゃぁぁぁ

という方は別途参考記事をば…

cocos2dx-暗号化、複合化その2 - 酒の備忘録

…え?説明してないだって?

魔王「きにするな!」