2009年1月20日火曜日

AS3で暗号/復号化(RSA版)

スズキです。

とりあえず、以下でAS3での暗号/復号化を試してみたのですが、
http://suz-lab.blogspot.com/2009/01/as3.html
SWFは公開されるものなので、
そこに復号できる鍵が埋め込まれているのは、
非常によろしくない状態です。(暗号化の意味があまりありません)
つまり、この手のものに、共通鍵暗号はやばいってことです。

ってことで、そうなると公開鍵暗号です。以下を参考に、
http://www.flash-jp.com/modules/newbb/viewtopic.php?topic_id=8260&forum=20
次のように実装することで実現できました。

--------【AS3】--------
var data:String = "suz-lab"; // 暗号/復号化対象

var pubmod:String
  = "69d21e08e8062a071a72fae2d4fc1e8e"
  + "a84e7000b97de8f57afb4f3bdc744c00"
  + "9371b0f7be95a413e8926f19d8d9a40c"
  + "3bb6762753ce7bb4c42b1b1d7cd537cb";
var pubexp:String = "10001";
var rsaEncrypt : RSAKey
  = RSAKey.parsePublicKey(pubmod, pubexp);

// String → Hex → Binary
var srcEncrypt:ByteArray = Hex.toArray(Hex.fromString(data));
var dstEncrypt:ByteArray = new ByteArray();
rsaEncrypt.encrypt(srcEncrypt, dstEncrypt, srcEncrypt.length);

// Base64でエンコードしたものをサーバに送る予定
var input:String = Base64.encodeByteArray(dstEncrypt);

// 下記の復号化はおまけ(実際はサーバ側で)
var priexp:String
  = "4684e9d3119c9a0165d4ddf0aff2dc02"
  + "419313fcc7a06ad0bc86214549228f4a"
  + "aafd98423169bf67a8f65702e8d0ea66"
  + "8a39b3214d452cf789183eb69e2b2651";
var rsaDecrypt:RSAKey
  = RSAKey.parsePrivateKey(pubmod, pubexp, priexp);
var srcDecrypt:ByteArray = Base64.decodeToByteArray(input);
var dstDecrypt:ByteArray = new ByteArray();
rsaDecrypt.decrypt(srcDecrypt, dstDecrypt, srcDecrypt.length);
var output:String = Hex.toString(Hex.fromArray(dstDecrypt));
--------

後は、「復号をPHPでできるか!?」、です...

--
http://suz-lab.blogspot.com/

0 コメント: