架构师训练营第11周作业 高可用 加密

2020-08-26  本文已影响0人  浩哥有料

导致系统不可用的原因有哪些?保障系统稳定高可用的方案有哪些?请分别列举并简述。

引起系统故障的原因大致可以分为硬件原因、软件原因、外部原因三类。

保障系统高可用的方案大致分为架构方案、运维方案、监控方案三类。

架构方案

运维方案

监控方案


请用你熟悉的编程语言写一个用户密码验证函数,Boolean checkPW(String 用户 ID,String 密码明文,String 密码密文)返回密码是否正确 boolean 值,密码加密算法使用你认为合适的加密算法。

分析

本题描述中,输入的参数已经包含了密码的密文,因此无需考虑密文的查询或解密过程,只需验证明文加密之后是否与密文一致即可。

在实际的软件系统中,验证密码这一运算应当在客户端完成,服务端无需知道密码明文是多少,因此题意应当指的是服务端返回查询到的密码密文后,客户端通过相应函数验证用户输入的密码明文是否正确。这样的设计可以确保网络上传输的仅仅只是请求ID和密码密文,明文不会直接在网络上传输,而且全程只需要对密码明文进行加密操作,而无需揭秘操作,因此可以使用单向散列算法来进行加密。但是考虑到“撞库”破解的风险,不能直接使用默认的加密运算,而是需要在运算中设置一些变化。

代码

from hashlib import sha256


def check_password(uid, password, cipher):
    if encrypt(uid, password) == cipher:
        return True
    return False


def str_to_hex(string):
    string_hex = ''
    for i in range(len(string)):
        string_hex += hex(ord(string[i]))[2:]
    return string_hex

def encrypt(uid, password):
    salt = 'magic words'
    combined_string = str(hex(uid)) + str_to_hex(salt) + str_to_hex(password)
    return sha256(combined_string).hexdigest()


def test():
    print check_password(155, 'P@ssWord', '1cdf025ea9e37482ea93266570cb4ef5fbd96546bf41e400635493d5d99705ca')
    print check_password(155, '123!@#qweASD', '1cdf025ea9e37482ea93266570cb4ef5fbd96546bf41e400635493d5d99705ca')


test()

# 结果:
# True
# False
上一篇 下一篇

猜你喜欢

热点阅读