我正在参加比赛,但我无法解决此任务。 目的是使用秘密词典中列出的不同帐户登录,而无需知道密码。 不允许更改代码。 例如,您可以使用以下输入来宾登录:
anything
0
,并与用户:
user
-1
我不知道如何用管理员登录。
#!/usr/bin/python3
# Change the pin codes here before using this software:
secrets = {
"guest": 123456,
"user": 123456,
"admin": 123456
}
def authenticate():
selected_user = input("Enter your username: ")
if selected_user.lower() == "admin":
print("Administrator access is disabled on this interface!")
return None
real_user = "guest"
real_pin = 0
for (user, pin) in secrets.items():
if user.upper() == selected_user.upper():
real_user = user
real_pin = pin
try:
pin_as_string = input("Enter your PIN code: ")
selected_pin = int(pin_as_string)
except:
print("Some error occured while reading PIN code, please try again!")
return None
if not pin_as_string.isdigit():
print("Warning: the PIN contains a non-digit character!")
elif selected_pin != real_pin:
print("Incorrect PIN code!")
return None
return real_user
user = authenticate()
if user is not None:
print("Successful login as", user)
答案 0 :(得分:2)
您想要一个大写时映射到"ADMIN"
字母的字符。向Python索要很容易:
lst = []
for i in range(0xffff):
try:
c = chr(i)
if c.upper() in "ADMIN": print(hex(i), c, c.lower())
except Exception as e: # don't break if any exception
print(i, "->", e)
你得到
0x41 A a
0x44 D d
0x49 I i
0x4d M m
0x4e N n
0x61 a a
0x64 d d
0x69 i i
0x6d m m
0x6e n n
0x131 ı ı
这个有趣的值是最后一个值:U + 0131,根据unicodedata
模块,这是拉丁文小写字母I 。
在Microsoft Windows中,此字符存在于代码页850中:print(chr(0x131).encode('cp850'))
赋予b'\xd5'
。因此,序列 Alt Num 2 Num 1 Num 3 将允许在控制台中输入它({{1 }}是hex(213)
)。 +1或-1作为密码即可解决问题!在我自己的控制台中:
'0xd5'
不确定其他系统,但Wikipedia上的Unicode input可能会有所帮助。