Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

xanburzum

[Resolvido] algoritmo RC4

Recommended Posts

Para impedir que pessoas não autorizadas tenham acesso à informação, a técnica de criptografia de chave secreta é baseada no algoritmo RC4, projetado por Ronald Rivest em 1987. O RC4 é um algoritmo de fluxo, isto é, o algoritmo criptografa os dados à medida que eles são transmitidos, aumentando assim o seu desempenho.

 

Para enviar uma mensagem, a estação transmissora, inicialmente, concatena a sua chave secreta (shared key) a um vetor de inicialização (IV). O resultado serve de entrada para o algoritmo gerador de números pseudo-aleatórios (PRNG) definido pelo RC4. O PRNG (Pseudo Random Number Generator) gera uma seqüência de bits do mesmo tamanho que a informação a ser cifrada, ou seja, o frame MAC incluindo o CRC (Cyclic Redundancy Check),(Gast, 2002). Um XOR (OU exclusivo) é realizado entre o frame e a seqüência de bits, gerando o frame cifrado. Finalmente, o frame é enviado juntamente com o IV para que o receptor possa fazer o processo inverso.

 

<%
Function RC4(ByRef pStrMessage, ByRef pStrKey)

	Dim lBytAsciiAry(255)
	Dim lBytKeyAry(255)
	Dim lLngIndex
	Dim lBytJump
	Dim lBytTemp
	Dim lBytY
	Dim lLngT
	Dim lLngX
	Dim lLngKeyLength
	
	' Validar dados
	If Len(pStrKey) = 0 Then Exit Function
	If Len(pStrMessage) = 0 Then Exit Function

	' transferência repetiu-chave para array
	lLngKeyLength = Len(pStrKey)
	For lLngIndex = 0 To 255
	    lBytKeyAry(lLngIndex) = Asc(Mid(pStrKey, ((lLngIndex) Mod (lLngKeyLength)) + 1, 1))
	Next

	' Initializa S
	For lLngIndex = 0 To 255
	    lBytAsciiAry(lLngIndex) = lLngIndex
	Next

	' Mude os valores de S arround baseados fora do valor do index e da and Key 
	lBytJump = 0
	For lLngIndex = 0 To 255
	
		' Figura índice para alternar
	    lBytJump = (lBytJump + lBytAsciiAry(lLngIndex) + lBytKeyAry(lLngIndex)) Mod 256
	    
	    ' Faça o interrupção
	    lBytTemp				= lBytAsciiAry(lLngIndex)
	    lBytAsciiAry(lLngIndex)	= lBytAsciiAry(lBytJump)
	    lBytAsciiAry(lBytJump)	= lBytTemp
	    
	Next

	
	lLngIndex = 0
	lBytJump = 0
	For lLngX = 1 To Len(pStrMessage)
	    lLngIndex = (lLngIndex + 1) Mod 256 ' wrap index
	    lBytJump = (lBytJump + lBytAsciiAry(lLngIndex)) Mod 256 ' wrap J+S()
	    
		' Add/Wrap os dois	    
	    lLngT = (lBytAsciiAry(lLngIndex) + lBytAsciiAry(lBytJump)) Mod 256
	    
	    ' Switcheroo
	    lBytTemp				= lBytAsciiAry(lLngIndex)
	    lBytAsciiAry(lLngIndex)	= lBytAsciiAry(lBytJump)
	    lBytAsciiAry(lBytJump)	= lBytTemp

	    lBytY = lBytAsciiAry(lLngT)
	
		' Criptografia de Caracteres ...    
	    RC4 = RC4 & Chr(Asc(Mid(pStrMessage, lLngX, 1)) Xor lBytY)
	Next
	
End Function
%>

usando o RC4

<%Option Explicit%>
<!--#INCLUDE FILE="RC4.asp"-->
<%
Dim lStrKey
Dim lStrMessage
Dim lStrResult
If Not Request.Form = "" Then
	lStrKey = Request.Form("Key")
	lStrMessage = Request.Form("Message")
	lStrResult = RC4(lStrMessage, lStrKey)
End If
%>
<HTML>
	<HEAD>
		<TITLE>RC4 Encryption</TITLE>
	</HEAD>
	<BODY>
		<H1>RC4 Encryption</H1>
		<P>
			Este script criptografa e descriptografa mensagens com o algoritmo RC4. Digite a senha (chave) e uma mensagem para criptar ou descriptar os campos abaixo
		</P>
		<FORM method="Post">
			Key: 
	    <INPUT name="Key" value="<%=Server.HTMLEncode(lStrKey)%>"><BR>
			<BR>
			Mensagem:<BR>
			<TEXTAREA name="Message" rows="6" cols="50"><%=Server.HTMLEncode(lStrResult)%></TEXTAREA>
			<BR>
			<INPUT type="Submit" value="ok">
		</FORM>
		</BODY>
</HTML>

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.