“关闭” 数字看起来不同的新答案
您可以使用 RSA 加密(和稍后解密)您的数字。这肯定是过度设计的 - 但是...以下是示例:
安装
https://github.com/sybrenstuvel/python-rsa
(
pip install rsa
)。
import rsa
import rsa.core
pubkey = rsa.PublicKey(n=9645943279888986023, e=65537)
privkey = rsa.PrivateKey(n=9645943279888986023, e=65537, d=7507666207464026273, p=9255782423, q=1042153201)
print("1st", rsa.core.encrypt_int(13892359163211, pubkey.e, pubkey.n))
print("2nd", rsa.core.encrypt_int(13992351216421, pubkey.e, pubkey.n))
print("1st", hex(rsa.core.encrypt_int(13892359163211, pubkey.e, pubkey.n))[2:])
print("2nd", hex(rsa.core.encrypt_int(13992351216421, pubkey.e, pubkey.n))[2:])
for i in range (13892359163211, 13892359163251):
encrypted = rsa.core.encrypt_int(i, pubkey.e, pubkey.n)
print (i, hex(encrypted)[2:], encrypted)
请注意,您不能加密大于pubkey.n
的数字。这是RSA相关的限制。通过生成一个不同的具有更高n
的密钥对,可以绕过此问题。如果要使所有生成的数字具有相同的长度,请在前面加上前导零。您还可以考虑将它们大写以提高可读性。为了使显示的字符串更短,请考虑使用我早期答案中提到的base62编码。
输出
1st 5427392181794576250
2nd 7543432434424555966
1st 4b51f86f0c99177a
2nd 68afa7d5110929be
input hex(encrypted) encrypted
13892359163211 4b51f86f0c99177a 5427392181794576250
13892359163212 2039f9a3f5cf5d46 2322161565485194566
13892359163213 173997b57918a6c3 1673535542221383363
13892359163214 36644663653bbb4 244958435527080884
13892359163215 c2eeec0c054e633 877901489011746355
...
旧版答案与数字的显示方式有关,不知道它们应该看起来显着不同
您想将数字的基数从10更改为更大的数字,以使用更少的字符。请参见https://dev59.com/M3NA5IYBdhLWcg3wBpHs#1119769,其中有一个使用62进制(a-zA-Z0-9
)的示例。
或者可以使用16进制(0-9A-F
)进行快速且简单的转换。
hex(13892359163211)[2:]