Pesquisa

Pesquisa personalizada

terça-feira, 29 de novembro de 2011

Separar Strings em JavaScript

Java Script
A função split() pode ser utilizada em javascript para separar strings por meio de um delimitador.

A sintaxe é string.split('delimitador');

Veja neste exemplo , estamos separando três strings com o uso do pipe (|) :

var parametros="banana|maçã|manga";
var quebra=parametros.split("|");

alert(quebra[0]); // mostra apenas a string "banana"
alert(quebra[1]); // mostra apenas a palavra "maçã"
alert(quebra[2]); // mostra apenas a palavra "manga"

Veja o exemplo na imagem a seguir :

split() separando strings em javascript

segunda-feira, 7 de novembro de 2011

MD5

md5O Message-Digest algorithm 5 conhecido como MD5 é um algoritmo de hash criptográfico de 128 bits unidirecional utilizado por softwares com protocolo ponto-a-ponto (P2P, ou Peer-to-Peer), na verificação de integridade de arquivos e logins, para salvar senhas em bancos de dados e também é usado em assinaturas digitais onde um texto precisa ser criptografado de forma segura antes de ser cifrado com uma chave privada por um sistema de chave pública.

O MD5 foi desenvolvido por Ronald Rivest no ano de 1991 e colocado em dominio público em 1992, para suceder ao MD4 que estava com alguns problemas de segurança. Os cálculos do MD5 são um pouco mais lentos mas é muito mais seguro que o MD4.

A entrada do MD5 é um fluxo de dados isto é a mensagem, esta pode ter um número arbitrário de bits, representado por b, um número inteiro positivo que varia de zero até o infinito. Para obter a mensagem cifrada, seus bits, representados por m0, m1, ..., m{b-1} são submetidos a diversas operações. Este processo é dividido em cinco etapas.

1) Preparar o Fluxo de dados: Adiciona-se na mensagem os bits necessários para que seu tamanho mais 64 bits sejam divisível por 512.

2) Incluir o Comprimento: uma representação binária do tamanho original da mensagem e que ocupa 64 bits, é adicionada à mesma. O conjunto obtido é processado em blocos de 512 bits e cada bloco é processado em quatro rodadas distintas.

3)Inicializar o Buffer: Um buffer de quatro variaveis é usado para calcular a mensagem. Os registradores de 32 bits A, B, C e D são inicializados com os seguintes valores hexadecimais:

var A: 01 23 45 67
var B: 89 ab cd ef
var C: fe dc ba 98
var D: 76 54 32 10

4) Processamento da mensagem: Primeiramente são definidas quatro funções auxiliares. Cada uma usa três variaveis de 32 bits para produzir uma saída de uma variavel de 32 bits.

F(X,Y,Z) = (X and Y) or (not(X) and Z)
G(X,Y,Z) = (X and Z) or (Y and not(Z))
H(X,Y,Z) = X xor Y xor Z
I(X,Y,Z) = Y xor (X or not(Z))

A função F atua como condicional sobre cada um dos bits: se X então Y senão Z. Os bits de X, Y e Z são independentes e não induzidos então cada bit de F(X,Y,Z) também será independente e não induzido.

As funções G, H e I são semelhantes à função F produzindo saídas de bits independentes e não induzidos se os mesmos tiverem estas características.

A função H é apenas um "XOR" ou função de "paridade" das suas entradas.

As etapas deste passo usam uma tabela de 64 elementos, T[1] a T[64], construída à partir da função seno. T[i] for o nésimo elemento da tabela e é igual à parte inteira de abs(seno(i)) multiplicada por 4294967296, onde i é expresso em radianos. Antes de iniciar o processamento, deve-se armazenar os valores de A, B, C e D. Neste texto, as variáveis de trabalho serão expressas em letras minúsculas, portanto armazenamos a = A, b = B, c = C e d = D. Divide-se cada bloco de 512 bits em 16 sub-blocos de 32 bits, identificados por X[0] a X[15]. Genericamente, os sub-blocos são designados por X[k]. A seguir, aplica-se as funções F, G, H e I em quatro rodadas:

/* Rodada 1 : Seja [abcd k s i] a operação a = b + ((a + F(b,c,d) + X[k] + T[i]) <<< s) Faça as seguintes 16 operações. */

[ABCD 0 7 1] [DABC 1 12 2] [CDAB 2 17 3] [BCDA 3 22 4]
[ABCD 4 7 5] [DABC 5 12 6] [CDAB 6 17 7] [BCDA 7 22 8]
[ABCD 8 7 9] [DABC 9 12 10] [CDAB 10 17 11] [BCDA 11 22 12]
[ABCD 12 7 13] [DABC 13 12 14] [CDAB 14 17 15] [BCDA 15 22 16]

/* Rodada 2: Seja [abcd k s i] a operação a = b + ((a + G(b,c,d) + X[k] + T[i]) <<< s) Faça as seguintes 16 operações.*/

[ABCD 1 5 17] [DABC 6 9 18] [CDAB 11 14 19] [BCDA 0 20 20]
[ABCD 5 5 21] [DABC 10 9 22] [CDAB 15 14 23] [BCDA 4 20 24]
[ABCD 9 5 25] [DABC 14 9 26] [CDAB 3 14 27] [BCDA 8 20 28]
[ABCD 13 5 29] [DABC 2 9 30] [CDAB 7 14 31] [BCDA 12 20 32]

/* Rodada 3: Seja [abcd k s i] a operação a = b + ((a + H(b,c,d) + X[k] + T[i]) <<< s) Faça as seguintes 16 operações*/

[ABCD 5 4 33] [DABC 8 11 34] [CDAB 11 16 35] [BCDA 14 23 36]
[ABCD 1 4 37] [DABC 4 11 38] [CDAB 7 16 39] [BCDA 10 23 40]
[ABCD 13 4 41] [DABC 0 11 42] [CDAB 3 16 43] [BCDA 6 23 44]
[ABCD 9 4 45] [DABC 12 11 46] [CDAB 15 16 47] [BCDA 2 23 48]

/* Rodada 4: Seja [abcd k s i] a operação a = b + ((a + I(b,c,d) + X[k] + T[i]) <<< s) Faça as seguintes 16 operações*/

[ABCD 0 6 49] [DABC 7 10 50] [CDAB 14 15 51] [BCDA 5 21 52]
[ABCD 12 6 53] [DABC 3 10 54] [CDAB 10 15 55] [BCDA 1 21 56]
[ABCD 8 6 57] [DABC 15 10 58] [CDAB 6 15 59] [BCDA 13 21 60]
[ABCD 4 6 61] [DABC 11 10 62] [CDAB 2 15 63] [BCDA 9 21 64]

/* Por fim, faça as adições dos resultados obtidos para a, b, c, d com os valores iniciais de A, B, C e D*/

A = a + A
B = b + B
C = c + C
D = d + D

5) Saída: a saída é a concatenação de A, B, C e D. Começa-se com o byte menos significativo de A e termina-se com o byte mais significativo de D.

Rodada 1
--------------------------------
F(a,b,c,d, X[ 0], 7, 0xd76aa478)
F(d,a,b,c, X[ 1],12, 0xe8c7b756)
F(c,d,a,b, X[ 2],17, 0x242070db)
F(b,c,d,a, X[ 3],22, 0xc1bdceee)
F(a,b,c,d, X[ 4], 7, 0xf57cc0af)
F(d,a,b,c, X[ 5],12, 0x4787c62a)
F(c,d,a,b, X[ 6],17, 0xa8304613)
F(b,c,d,a, X[ 7],22, 0xfd469501)
F(a,b,c,d, X[ 8], 7, 0x698098d8)
F(d,a,b,c, X[ 9],12, 0x8b44f7af)
F(c,d,a,b, X[10],17, 0xffff5bb1)
F(b,c,d,a, X[11],22, 0x895cd7be)
F(a,b,c,d, X[12], 7, 0x6b901122)
F(d,a,b,c, X[13],12, 0xfd987193)
F(c,d,a,b, X[14],17, 0xa679438e)
F(b,c,d,a, X[15],22, 0x49b40821)

Rodada 2
---------------------------------
G(a,b,c,d, X[ 1], 5, 0xf61e2562)
G(d,a,b,c, X[ 6], 9, 0xc040b340)
G(c,d,a,b, X[11],14, 0x265e5a51)
G(b,c,d,a, X[ 0],20, 0xe9b6c7aa)
G(a,b,c,d, X[ 5], 5, 0xd62f105d)
G(d,a,b,c, X[10], 9, 0x02441453)
G(c,d,a,b, X[15],14, 0xd8a1e681)
G(b,c,d,a, X[ 4],20, 0xe7d3fbc8)
G(a,b,c,d, X[ 9], 5, 0x21e1cde6)
G(d,a,b,c, X[14], 9, 0xc33707d6)
G(c,d,a,b, X[ 3],14, 0xf4d50d87)
G(b,c,d,a, X[ 8],20, 0x455a14ed)
G(a,b,c,d, X[13], 5, 0xa9e3e905)
G(d,a,b,c, X[ 2], 9, 0xfcefa3f8)
G(c,d,a,b, X[ 7],14, 0x676f02d9)
G(b,c,d,a, X[12],20, 0x8d2a4c8a)

Rodada 3
--------------------------------
H(a,b,c,d, X[ 5], 4, 0xfffa3942)
H(d,a,b,c, X[ 8],11, 0x8771f681)
H(c,d,a,b, X[11],16, 0x6d9d6122)
H(b,c,d,a, X[14],23, 0xfde5380c)
H(a,b,c,d, X[ 1], 4, 0xa4beea44)
H(d,a,b,c, X[ 4],11, 0x4bdecfa9)
H(c,d,a,b, X[ 7],16, 0xf6bb4b60)
H(b,c,d,a, X[10],23, 0xbebfbc70)
H(a,b,c,d, X[13], 4, 0x289b7ec6)
H(d,a,b,c, X[ 0],11, 0xeaa127fa)
H(c,d,a,b, X[ 3],16, 0xd4ef3085)
H(b,c,d,a, X[ 6],23, 0x04881d05)
H(a,b,c,d, X[ 9], 4, 0xd9d4d039)
H(d,a,b,c, X[12],11, 0xe6db99e5)
H(c,d,a,b, X[15],16, 0x1fa27cf8)
H(b,c,d,a, X[ 2],23, 0xc4ac5665)

Rodada 4
-------------------------------
I(a,b,c,d, X[ 0], 6, 0xf4292244)
I(d,a,b,c, X[ 7],10, 0x411aff97)
I(c,d,a,b, X[14],15, 0xab9423a7)
I(b,c,d,a, X[ 5],21, 0xfc93a039)
I(a,b,c,d, X[12], 6, 0x655b59c3)
I(d,a,b,c, X[ 3],10, 0x8f0ccc92)
I(c,d,a,b, X[10],15, 0xffeff47d)
I(b,c,d,a, X[ 1],21, 0x85848dd1)
I(a,b,c,d, X[ 8], 6, 0x6fa87e4f)
I(d,a,b,c, X[15],10, 0xfe2ce6e0)
I(c,d,a,b, X[ 6],15, 0xa3014314)
I(b,c,d,a, X[13],21, 0x4e0811a1)
I(a,b,c,d, X[ 4], 6, 0xf7537e82)
I(d,a,b,c, X[11],10, 0xbd3af235)
I(c,d,a,b, X[ 2],15, 0x2ad7d2bb)
I(b,c,d,a, X[ 9],21, 0xeb86d391)

Exemplos de utilização do MD5: Não existem hash parecidos, apenas idênticos :

MD5 ("") = d41d8cd98f00b204e9800998ecf8427e

MD5 ("a") = 0cc175b9c0f1b6a831c399e269772661

MD5 ("abc") = 900150983cd24fb0d6963f7d28e17f72

MD5 ("message digest")= f96b697d7cb7938d525a2f31aaf161d0

MD5 ("abcdefghijklmnopqrstuvwxyz") = c3fcd3d76192e4007dfb496cca67e13b

MD5 ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789") = d174ab98d277d9f5a5611c2c9f419d9f

MD5("12345678901234567890123456789012345678901234567890123456789012345678901234567890") = 57edf4a22be3c955ac49da2e2107b67a