如何解决如何控制^XOR操作的输出落在预期范围之间?
我正在尝试创建一个Python脚本,该脚本的输入字符串严格包含数字,大写或小写字母。 650XYZ000X34
是示例输入。
现在,我想以某种方式将输入的每个字符替换为A到B范围内的字符,并将每个数字替换为0到9之间的数字,以使输出看起来不相关。 我不一定要用字母代替字母,而要用数字代替数字,但是我希望输出严格包含0到9之间的字符,大写A到Z,小写a到z 。
我发现对每个字符执行XOR操作可能会达到我的目标,因为XOR会从某种东西中产生某些东西,从而使输出看起来非常不相关。所以我写了下面的代码。
# Input to the script is not longer than 12 characters
import sys
def myxor(s1,s2):
a_list = [chr(ord(a) ^ ord(b)) for a,b in zip(s1,s2)]
return "".join(a_list)
input = str(sys.argv[1])
secret = myxor('MySaLtToTestSomething',input)
print("The secret key computed is: " + secret)
但是上面的问题是它650XYZ000X34
输出et|
。输出很小,并且包含我不需要的特殊字符。有没有办法使方法myxor
用0到9之间的数字或大写A到Z或小写a到z的字母替换输入的每个字符?某种受控的XOR操作?
解决方法
输出似乎很好
xcodegen generate
请记住,zip仅匹配两个字符串中的最小字符串,其余不匹配的较长字符串将被忽略。
现在要使输出落在范围内,您可以尝试执行以下操作:
for a,b in zip('SaLt','650XYZ000X34'):
print (a,b,'-->',chr(ord(a) ^ ord(b)))
S 6 --> e
a 5 --> T
L 0 --> |
t X -->,
您的结果将是
for a,'650XYZ000X34'):
xor=ord(a) ^ ord(b)
while True:
if xor<65:
xor=xor%10 # selects a number between 48 and 57
i=48
break
if xor<97:
xor=xor%26 # selects a number between 65 and 90
i=65
break
xor=xor%26 # selects a number between 97 and 122
i=97
break
print (a,chr(i+xor))
当然,您可以更改代码以适合您的特定环境。
,输出的Unicode范围是48-57是1-9,65-90是A-Z,97-122是a-z,所以
def toChar(num):
if 100>num>0:
if 58>num>47 or 91>num>64 or 123>num>97: # if its in desire output range,return it
return chr(num)
return chr(int(num/10+48)) #copy it to 48-57
if 200>num>99:
return chr(int(num/4+40)) #copy it to 65-90
if 300>num>199:
return chr(int(num/4+47)) # copy it to 97-122
我不确定xor可能返回的值是多少,这仅覆盖了1-300 该功能是这样的, 将num从范围A复制到范围B 将num除以大小比 然后添加差异
例如 从100-200复制到30-40 首先除以10,因为范围大10倍 然后加20进入范围
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。