0

我想使用 henon 方程加密像素值:

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]

我可以从 henon 方程中得到随机值

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)加密像素值。

我的问题 :

henon 有一些负随机值,因为我们知道没有负像素值。

那么我可以跳过负随机值(只保存正随机值)来加密原始像素值吗?

谢谢

4

1 回答 1

0

您正在使用Hénon 序列作为伪随机数的来源,对吗?

那么你当然可以选择丢弃负数(或者取绝对值,或者做一些其他花哨的事情)——只要你在加密和解密中做同样的事情。如果有规范,最好明确说明这一点。

也许您正在使用 Javascript 或其他%不是模数而是余数的语言。如果是这样,请参阅此答案


另外三点需要注意:

  • 仔细检查您是否正确。在我看来,您的计算应该是k[i+1] =1-a*(Math.pow(k[i], 2))+b*k[i],因为Hénon 序列只使用最后一个值。`
  • 你真的需要存储过去的k值吗?如果没有,那么只需使用

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

甚至更好

k = 1 + k * (b - a *k)
  • (剧透警告:这可能是练习的教学要点。)Hénon 序列是混乱的,浮点错误迟早会影响随机数。所以你的随机数生成器可能不像你想象的那么确定。
于 2012-07-25T22:14:55.527 回答