ugnagブログ

たいした内容はありません。思いつきで書いているだけ。
開発日記がメインかな。

<< GC暗号化スクリプト完成 | main | 携帯充電器の規格統一へ >>

備忘記録

GC-PARの暗号化の問題をどうやって解決したのか書いていなかったので、備忘記録として書いておくことにする。
まず、何が問題だったのかというと、変数のタイプに符号無し32ビット整数が使えないことで、論理演算の結果が期待した通りにならないということ。

そこで、32ビット値を2つの16ビットに分け、それぞれ論理演算をした後、再度32ビットに組み合わせるという手法を使った。

32ビットに戻す際も、上位16ビットを左にシフトするのではなく、0x10000を乗算して行い、合成はORではなく加算する。

どうやら、四則演算ならうまくいくようで、こうすれば大丈夫そうだった。

毎回、こんな処理をすると面倒だし間違いの元なので、当然サブルーチン化してておく。

サブルーチンにするのは、ANDとXORの処理と左シフト。
右シフトは、符号無視左シフト演算(>>>)を使えば問題無いようなので、とりあえずこれを使う。


まとめると、


function and(a, b)
{

var a1 = a >>> 16;
var a2 = a & 0xFFFF;
var b1 = b >>> 16;
var b2 = b & 0xFFFF;

var c1 = a1 & b1;
var c2 = a2 & b2;

var c = c1 * 0x10000 + c2;


return c;

}


とこんな感じ。

左シフトは、トップビットをクリアした後1ビット左シフトというのを繰り返す。


function shiftLeft(val, shift)
{

for(var i = 0 ; i < shift ; i++){
val = val & 0x7FFFFFFF;
val = val << 1;
}

return val;

}


これでなんとかなった。

しかし、暗号化計算では、AND、XOR、ビットシフトがやたらと出てくるので、そのたびにサブルーチンに置き換えるのに苦労した。

例えば、

tbl1[tmp<<3] ^ tbl2[temp&0x3F]

というような、ネストしているものはワーク変数を使いながら、間違わないように処理させた。

結構な作業だったので、疲れた。。。
プログラム・開発(その他ゲームツール) | comments (1) | -

Comments

エルメス サイズ 50 | 2023/12/17 02:10 PM
事前に問い合わせ済だったので安心して購入できました。手書きのメッセージもとても感じよかったです。
★ルイヴィトン★ヴェルニ★ポルトフォイユ・サラ★ファスナー付長財布★M91741★ブルーラゴン(廃カラー)★カード10枚収納★
届きました!
すでに廃盤になっているこの商品の新品を探していました。未使用品の新品でしたが、もう出会えないと思ったので購入しました。今日届きました。
確認す
と記載にあるとおり微細なキズはあるものの
気にならない程度でした。ヴィトンのタグも
っていました。商品ページには書かれていませんでしたが、純正の箱もありました。良い
エルメス サイズ 50 https://www.watchsjp.com/copy-12837.html

Comment Form

本文に書いて下さい
本文にh抜きで書いて下さい