Identificadores exclusivos que são de fácil utilização e difícil de adivinhar

StackOverflow https://stackoverflow.com/questions/1421463

  •  07-07-2019
  •  | 
  •  

Pergunta

A minha equipe está trabalhando em um aplicativo com um banco de dados legado que usa dois valores diferentes como identificadores exclusivos para um objeto Grupo: Id é uma coluna de auto incremento de identidade cujo valor é determinado pelo banco de dados após a inserção. GroupCode é determinada pela aplicação após inserção, e é "Group" + theGroup.Id.

O que precisamos é um algoritmo para gerar de GroupCode que:

  1. são únicos.
  2. são razoavelmente fácil para um usuário digitar corretamente.
  3. É difícil para um hacker de adivinhar.
  4. Você quer criado pelo banco de dados após a inserção, ou são criados pelo aplicativo antes da inserção (ou seja, não depende da coluna de identidade).

A solução existente atende aos dois primeiros critérios, mas não os dois últimos. Alguém sabe de uma boa solução para atender todos os itens acima critérios?

Uma nota mais: Mesmo que este código é usado externamente pelos usuários, e mesmo que Id faria um identificador melhor para outras tabelas de vincular suas chaves estrangeiras para, a GroupCode é utilizada por outras tabelas para se referir a um grupo específico.

Agradecemos antecipadamente.

Foi útil?

Solução

Seria possível adicionar uma nova coluna? Ele pode consistir de Identidade e um número de 32 bits aleatórios.

Esse número de 64 bits poderia, então, ser traduzido para um «Memorável aleatórios». Não seria perfeita segurança sábio, mas poderia ser bom o suficiente.

Aqui está um exemplo usando Ruby eo Koremutake gem .

require 'koremu'
# http://pastie.org/96316 adds Array.chunk
identity=104711
r=rand(2**32)<<32 # in this example 5946631977955229696
ka = KoremuFixnum.new(r+identity).to_ka.chunk(3)
ka.each {|arr| print KoremuArray.new(arr).to_ks + " "}

Resultado:

TUSADA REGRUMI LEBADE

Também confira Phonetically memorável senha Geração Algoritmos .

Outras dicas

Você já olhou para Base32 / Base36 codificação de conteúdo? representação Base32 de uma coluna de semente de identidade irá torná-lo único, fácil de entrar, mas definitivamente não é seguro. No entanto a maioria dos não-programadores terão nenhuma idéia de como o valor da cadeia é gerado.

Também usando Base32 / 36 você pode manter chaves primárias baseados inteiros do banco de dados normal.

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