0

ヘノン方程式を使用してピクセル値を暗号化したい:

Xi + 2 = 1-a *(Xi + 1)*(Xi + 1)+ bXi(申し訳ありませんが画像を投稿できません)

ここで、a = 1.4、b = 0.3、x0 = 0.01、x1 = 0.02、

このコードで:

k [i + 2] = 1-a *(Math.pow(k [i + 1]、2))+ b * k [i]

ヘノン方程式からランダムな値を得ることができます

1.00244、-0.40084033504000005、1.0757898361270288、-0.7405053806319072、0.5550494445953806、0.3465365454865311、0.99839222507778、-0.2915408854881054、1.1805231444476698、-1.038551118053691、-0.15586685140049938、0.6544223990721852、

。その後、ランダムな値を丸めました

このコードで:

inter [i] =(int)Math.round((k [i] * 65536)%256)

ランダム値(ヘノン)とのXORでピクセル値を暗号化できます。

私の質問 :

負のピクセル値がないことがわかっているので、henonから負のランダム値がいくつかあります。

だから私は元のピクセル値を暗号化するために負のランダム値をスキップすることができますか(正のランダム値のみを保存します)?

ありがとう

4

1 に答える 1

0

疑似乱数のソースとしてHénonシーケンスを使用していますよね?

次に、もちろん、暗号化と復号化で同じことを行う限り、負の数を破棄する(または絶対値を取得する、またはその他の凝ったことを行う)ことを選択できます。仕様がある場合は、これについて明示する必要があります。

たぶん、あなたはJavascriptか、モジュラス%はなく余りである他の言語を使用しています。もしそうなら、この答えを参照してください


注意すべき他の3つのこと:

  • 正しいことをまとめていることを再確認してください。Hénonシーケンスは最後の値のみを使用するk[i+1] =1-a*(Math.pow(k[i], 2))+b*k[i]ため、計算はを読み取る必要があるように思われます。`
  • 本当にkの過去の値を保存する必要がありますか?そうでない場合は、

    k = 1-a *(Math.pow(k、2))+ b * k

またはさらに良い

k = 1 + k * (b - a *k)
  • (ネタバレ注意:これは演習の教訓的なポイントである可能性があります。)Hénonシーケンスは混沌としており、浮動小数点エラーは遅かれ早かれ乱数に影響を与えます。したがって、乱数ジェネレーターは、思ったほど決定論的ではない可能性があります。
于 2012-07-25T22:14:55.527 に答える