微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何控制^XOR操作的输出落在预期范围之间?

如何解决如何控制^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 举报,一经查实,本站将立刻删除。