Pergunta

Estou um pouco confuso que o argumento para funções de criptografia é uma string. Devo simplesmente embrulhar argumentos não-string com str () por exemplo.

hashlib.sha256(str(user_id)+str(expiry_time))
hmac.new(str(random.randbits(256)))

(ignorar por um momento que random.randbits () pode não ser criptograficamente bom). edit: Eu perceber que o exemplo hmac é bobagem porque eu não estou armazenando o lugar chave

Foi útil?

Solução

Bem, geralmente de hash-funções (e funções criptográficas em geral) o trabalho em bytes. As cordas Python são basicamente byte-cordas. Se você quiser calcular o hash de algum objeto que você tem que convertê-lo em uma representação de cadeia. Apenas certifique-se de aplicar a mesma operação mais tarde, se você quiser verificar se o hash é correto. E certifique-se de que sua representação em cadeia não contém quaisquer dados mudança que você não quer ser marcada.

Edit: Devido ao pedido popular um pequeno lembrete de que Python strings unicode não contêm bytes, mas pontos de código unicode. Cada ponto de código Unicode contém múltipla bytes (2 ou 4, dependendo de como o interpretador Python foi compilado). cordas Python contêm apenas bytes. Então Python cordas (tipo str ) são o tipo mais semelhante a uma matriz de bytes.

Outras dicas

Você pode.

No entanto, para o HMAC, você realmente deseja armazenar a algum lugar chave. Sem a chave, não há nenhuma maneira de você verificar o valor de hash mais tarde. : -)

Oh e SHA256 não é realmente uma função criptográfica força industrial (embora, infelizmente, ele é usado muito comumente em muitos sites). Não é uma verdadeira maneira de senhas proteger ou outros dados críticos, mas mais do que suficiente para gerar temporais fichas

Edit: Como mencionado necessidades SHA256, pelo menos, um pouco de sal. Sem sal, SHA256 tem uma baixa barreira a ser quebrada com um ataque de dicionário (time-wise) e há uma abundância de tabelas do arco-íris para uso também. Pessoalmente, eu não usaria nada menos do que Blowfish para senhas (mas isso é porque eu sou paranóico)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top