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までになります

 

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