此刻,我经常需要在单元测试中使用哈希和加密签名来做一些事情。有时它们会生成,而我只需要稍作改动并证明某些东西不再起作用。它们是十六进制数字0-9和特定长度的af字符串。这是一个64位的示例:
h = '702b31faad0246cc89a5dc782cdf5235a885d0f529fb30a4e1e70e00938df91a'
我只想在其中某处更改一个字符。
您无法确定每个数字0-9和a-f都在其中,尽管您会猜测至少有95%的数字都在其中。如果可以确定,我会继续h = h.replace('a', 'b', 1)
进行下去。
如果您手动进行操作,则只需查看一下即可看到第三位数字为2并运行:
new = list(h)
new[2] = '3'
h = ''.join(new)
但是,如果您看不到它并且需要以编程方式进行操作,那么在某处仅更改其中一个字符的一种干净明确的方法是什么?
from random import randrange
h = '702b31faad0246cc89a5dc782cdf5235a885d0f529fb30a4e1e70e00938df91a'
i = randrange(len(h))
new_h = h[:i] + hex(int(h[i], 16) + randrange(1, 16))[-1:] + h[i+1:]
换句话说:
i
在h
请注意,以1到15(包括在内)之间的值为增量,后跟以16为模,则永远不会将十六进制数字映射到其自身。以0或16为增量将其完全映射到自身。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句