Estudando os BITS

Trazemos neste estudo um pouco sobre o que deveria ser o básico, um estudo
sobre os bits.

Um bit ‚ a quantidade minima de armazenamento na memoria. Um bit só
pode receber dois tipos de valores: Verdadeiro (1) ou Falso (0). O que recebe
nome de linguagem binaria.
8 bits em serie formam um byte.
Ok.. aqui que muitos se perdem... como um byte pode ser gerado por
8 bits?? Vamos pensar juntos:

00000000

Isto é‚ um byte composto apenas por valores Falsos. Então um cara
decidiu dizer que isto pode ser o mesmo que 0.
Ai esse mesmo cara achou que:

00000001

Poderia muito bem representar o numero 1 na linguagem binaria.
Assim como:

00000010 representa 2
00000011 representa 3
00000100 representa 4
00000101 representa 5
00000110 representa 6
00000111 representa 7

E por ai vai...
Estes 8 bits podem gerar numeros de 0 a 255.

11111111 representa 255

Em alguns sistemas, o oitavo bit serve de paridade. Sendo assim os bits
de informacoes são apenas 7 e o numero maximo formado por eles é 127.

1111111 representa 127

Em geral a paridade é feita por um bit extra. Mas pra que serve o
bit de paridade?? Simplesmente para conferir se a informacao do byte está
correta. Existem máquinas que usam mais de um bit de paridade para se certi-
ficarem de que a informacão sempre estará correta.
Como ele funciona? É simples... Simplesmente conta quantos bits tem o
valor 1. Se o numero de bits for par, o bit paridade assume valor 1. Se for
impar, 0.

Mas voltando aos bits de informacao:
Com 8 bits podemos gerar valores de 0 a 255. Em hexadecimal os valores
vão de 0 a FF. Ahhhh!!! Entendeu agora porque usar liguagem hexadecimal??
Utilizando apenas 2 casas hexadecimais podemos gerar todo o tipo de byte.
C usassemos numeros decimais precisariamos de 1 casa a mais (o que seria
um grande problema de espaço) além dos valores não ficarem arredondados. Ou
seja: em hexadecimal vai de 00 a FF e não sobra nenhum valor, emquanto em
decimal vai de 000 a 255 sobrando todos os valores de 256 a 999.
Notou como as coisas funcionam?? não foi algo inventado para complicar a
vida e sim com base em muitos calculos para deixar o sistema mais inteligente.

Estes bytes (de 0 a FF) foram padronisados com valores em uma tabela ASCII
para que em todas as máquinas eles representem os mesmos valores. Assim sendo,
todas as máquinas irao reconhecer o byte 6a como sendo "j".
Veja a seguinte tabelinha abaixo:

binario decimal hexadecimal ASCII
01100001 97 61 a
01100010 98 62 b
01100011 99 63 c
01100100 100 64 d
etc...

Textos puros da sua máquina usam esta tabela ASCII sendo que caso você
lesse o texto em forma binaria receberia os valores correspondentes na tabela.

Outra coisa que poucos sabem é que IPs nada mais sao do que um número
inteiro de 32 bits. Uh??? Isso mesmo.

011111110000000000000000000000001

Isto é um IP. Na verdade eh usado sua forma inteira decimal e nao binaria,
entao este IP nada mais é do que:

2130706433

Isto é um IP em sua forma mais simplificada. Pode testar na sua maquina
e ele funciona.
Você acha dificil decorar IPs no formato: 204.34.3.5?? Imagine então ter
que decorar numeros como estes?? Para simplifica-lo, os bits foram manipulados
até formarem o formato do IP que todos conhecem.
Como isso foi feito?
Estes 32 bits sao separados em 4 conjuntos. O que da 8 bits por conjunto,
ou um byte. O IP mostrado acima ficaria então:

01111111 00000000 00000000 00000001

Estes 4 bytes entao sao transformados em inteiros decimais. Isto resulta:

127 0 0 1

Alguem achou que ficava bonito separar estes bytes com . (pontos).

127.0.0.1

Sakou como funcionam o negocio?? Tentei ser bem claro. Se tu nao entendeu
leia denovo, se nao quizer, apenas tenha em mente que um IP tanto pode ser
escrito por uma cadeia de 32bits qto por 4 conjuntos de 8bits.
Isto podera ser muito util para escapar de bloqueios de alguns hosts, pois
é normal que alguem coloque o IP na forma classica mas quase nunca é colocado
em sua forma inteira 32bits. Hm... vi isso em um texto da unsekurity que no
momento nao estou lembrado do autor...

Outra manipulacao de bits classica é usada em rotinas de criptografias.
Usando um simples operador bit-a-bit de C podemos criar nosso proprio encrypt.
Seria uma funcao tipo:


char encrypt(char ch) { return(~ch) }


O operador ~ inverte o estado de cada bit da variavel especificada. Todos
os valores 1 tornam-se 0 e os 0 tornam-se 1.
Entao:

01000001 ("A" na tabela ASCII)

...ficaria...

10111110 ("¾" na tabela ASCII)

Como vemos, o resultado seria algo ilegivel. O que é otimo num programa
de criptografia. Para descriptar a mesma variavel, basta passa-la novamente
pelo encrypt(). O mesmo operador ira agir na variavel fazendo-a voltar ao seu
estado normal.
Este operador usado sozinho nao garante seguranca de que seus dados estarao
protegidos, pois eh facilmente decifravel. Porem, combinado com outros sistemas
de criptografia pode ser muito util.
Outro operador de bit usado para criptografia eh o XOR (^). Para testa-lo
tente passar algum caracter pela seguinte funcao:


char encrypt2(char ch) { return(ch^'A') }


Saka a funcao do XOR nao eh? Eh um OU Exclusivo que retorna 1 qdo apenas um
dos dois bits for Verdadeiro (1). Basicamente, ele segue a ideia "Ou um ou
outro". =)
No codigo acima fazemos um XOR entre o caractere a ser encriptado e 'A'. No
jargao de criptografia este 'A' eh chamado de chave de encriptacao.
Entao:

01000010 ("B" na tabela ASCII)
XOR 01000001 ("A" - Chave)

...fikaria...

00000011 (Caractere especial)

Novamente temos algo ilegivel. Novamente passando o caractere gerado pela
mesma funcao receberiamos o anterior.
Como pode ver a manipulacao de bits eh ampla na area de criptografia. Um
codigo bem escrito faria qquer palavra encriptada ser praticamente impossivel
de ser quebrada.

 

Imprimir Topo>>>
Hosted by www.Geocities.ws

1