我正在使用Python编写简单的RSA解密例程(我对Python有点新手)并且似乎找不到在我的代码中整齐地格式化长整数的方法。 整数长度为2048位,如果写入一行,则向右延伸。在C中,这样的整数将由字数组表示,可以在一个页面上整齐地写出。 我将如何在Python中执行此操作?我尝试了一个明显的解决方案:
modulus = 0xaaaaa\
bbbbb\
ccccc
这根本不起作用。我发现的唯一工作就是:
smodulus = "\
aaaaa\
bbbbb\
ccccc"
modulus = long(smodulus,16)
你能为长整数建议一种格式化方法吗?
感谢。
答案 0 :(得分:2)
Python concatenates adjacent string literals所以你可以写:
long('01234567'
'89abcdef'
'01234567'
'89abcdef',
16)
答案 1 :(得分:0)
howbout:
modulus =( 0xaaaaaaaa << 64
| 0xbbbbbbbb << 32
| 0xcccccccc << 0 )
或者,如果不希望跟踪这些偏移,那么这是一个简单的帮手:
def longmodulus(size, seq):
return sum(leg << offset for leg, offset in zip(seq, xrange(size*len(seq)-size, -size, -size)))
modulus = longmodulus(32,
(0xaaaaaaaa,
0xbbbbbbbb,
0xcccccccc))
答案 2 :(得分:-1)
创建自己的解析字符串的函数,并使用它来定义全局。
SMODULUS = parse("""
aaaab
bbbbb
ccccc
""")
def myFunc(...):
crypomath_and_stuff = SMODULUS | abc & etc
...
你可能能够绕过它,并避免使它成为一个全局的,但这取决于python解释器是否足够聪明,可以将常量函数编译为预处理数据,JIT样式(并且还取决于如果python语言的语义甚至允许这样的优化)。要自己试验一下,可以使用dis.dis
(python反汇编程序)来查看是否确实进行了优化(或者更可能是未进行优化)。如果您根本不关心性能,也可以将其内联,或者这些是对使用parse
d变量的函数的一次性调用。