Tiago Madeira Inferências aleatórias de um cérebro em versão alpha

"Só se dedicará a um assunto com toda a seriedade alguém que esteja envolvido de modo imediato e que se ocupe dele com amor. É sempre de tais pessoas, e não dos assalariados, que vêm as grandes descobertas."
(Arthur Schopenhauer)

Economia de 9 megabytes no banco de dados

Trago aqui nessa postagem um conhecimento completamente inútil, mas inédito: o ENEM não tem um campo de senha de acesso na tabela de participantes da prova no seu banco de dados. Com isso ele economiza 9 mb e em troca um monte de gente fica feliz "hackeando" seu sistema.

Vejam: a senha tem oito dígitos.
2^26 = 67108864 é o maior número de oito dígitos feito a partir de potências de dois.

Ou seja, se o banco de dados tivesse este campo senha, seriam gastos 26 bits a mais para cada um dos milhões de participantes. Segundo a página inicial deles, foram 2.738.610 pessoas que fizeram a prova, o que significa que seriam mais...

26/8 * 2738610 / (1024*1024) = 8.488 megabytes

(dividi por oito para converter de bit pra byte, multipliquei pelo número de participantes e dividi por 1024 ao quadrado para ter o resultado em megabytes)

Ao invés de gerar um inteiro aleatório (a solução mais óbvia, na minha opinião), eles trabalham com um algoritmo muito simples: o número de inscrição é no formato 2007.ABCDEFG-H, onde as letras são algarismos de 0 a 9. Os algarismos da senha são: 9-E F 9-G H 9-A B 9-C D.

É só. Ou, para rubeiros:

puts "Digite seu número de inscrição e pressione 'Enter'."
a=gets.gsub(/^2007/, '').gsub(/[^0-9]*/, '').split('')
puts "#{9-a[4].to_i}#{a[5]}#{9-a[6].to_i}#{a[7]}#{9-a[0].to_i}#{a[1]}#{9-a[2].to_i}#{a[3]}"

Exemplo prático: meu número de inscrição é 2007.3210403-6 e minha senha é 50666280.

Nunca trabalhei num sistema com tantos cadastrados, mas quero saber das pessoas mais capacitadas que lêem esse humilde blog: vale a pena fazer essa economia de alguns megabytes e em troca ingenuamente deixar as pessoas saberem das senhas umas das outras? IMHO, até que alguém me convença do contrário, isso não é boa programação.

PS: Não fui eu que descobri isso, mas acho que eu fui o primeiro a compartilhar essa descoberta dessa maneira. Quem descobriu foi um cara que divulgou um binário de Windows aqui. Eu emulei via Wine e fui simplesmente adicionando e subtraindo dos algarismos pra chegar a essa conclusão óbvia.

Technorati Tags: , , , , ,

Compare Preços de: iPod, home theater, plasma, lcd, câmeras digitais, games, ps3

Escrito por Tiago Madeira no dia 02/12/2007 às 23h 32min. Acompanhe os comentários via RSS 2.0. Você pode deixar um comentário ou fazer um trackback do seu site.

3 comentários para “Economia de 9 megabytes no banco de dados”

  1. #1 | Wendel

    Pode ser pior: eles podem estar guardando *essa* senha pré-calculada. Em um varchar(100).

    Depois de ver uma tabela onde as colunas - inclusive CNPJ - eram varchar(4000), não duvido de mais nada :-)

    Ah, e s/IHMO/IMHO/

  2. #2 | Tiago Madeira

    Caramba… varchar(4000) é desumano!

  3. #3 | Felipe Ferreira

    well…sinceramente não sei nem qual o servidor de banco de dados eles estão usando na secretaria de educacao, provavelmente oracle ou sql server, se for igual a alguns governos estaduais.
    falando da ferramenta da qual eu tenho informacao suficiente, o sql server, adicionar um campo varchar(8), ou seja, armazenar a senha sem criptografar ela antes. iria consumir em uma tabela com essa quantidade de registros algo em torno de 40Mb a mais de espaço em disco, mas tudo depende da quantidade de colunas na tabela, tipo de cada campo, índices, etc.
    mas de qualquer forma…nada nesse mundo justificaria não criar um campo senha no banco de dados.
    o tempo de CPU e a memoria necessaria pra rodar o algoritmo que verifica a senha é mais caro do que o espaço em disco que este campo adicional iria utilizar

Deixe um comentário

Dados Pessoais
  • Obrigatório.
  • Obrigatório, não publicado.
Comentário

Artigos relacionados:

Assine via RSS

Assine gratuitamente o meu blog e receba todas as atualizações na hora, em seu agregador de feeds favorito.

Seja o 231º assinante

Busca no blog

Escreva palavras-chave para buscar e clique em Pesquisar.

Busca Google

Blogs de minha autoria

Publicidade

Dreamhost

Creative Commons - Some rights reserved tiagomadeira.net © Todo o conteúdo deste blog, exceto quando especificado o contrário, está licenciado sob uma Licença Creative Commons por Tiago Madeira. Os comentários são de responsabilidade de seus respectivos autores.