|
||
|
|
|
Avaliação:
![]() ![]() ![]() ![]() | Publicado em: 03/11/2006Criptografia de Dados 128 Bits
Fabrizio Gianfratti Fabrizio Gianfratti trabalha com desenvolvimento desde 1995 e desenvolve com ASP,ASP.NET (VB.Net, C#),JavaScript,SQl SERVER.
Tem grande experiência no desenvolvimento de portais e ferramentas de gerenciamento de conteúdo, atualmente trabalha como WebDeveloper em projetos para desenvolvimento de sistemas
na a área hospitalar. Disponibiliza muitas informações em seu site www.gianfratti.com
Neste artigo vou mostrar como você pode usar na prática as classes que o .NET Framework oferece para realizar a criptografia. Vou começar com um exemplo de criptografia de chave privada ou criptografia simétrica, que indica que a mesma chave usada para cifrar é usada para decifrar. Iremos usar o algoritmo Rijndael que é o novo DES, definido pelo governo americano, o Rijndael utiliza uma chave mais forte (256bits). A Criptografia tem infinitas usabilidades, isso todos sabem, vou dar apenas alguns exemplos de como ela poderia ser usada na WEB. Todo mundo passa parâmetros via QueryString (Ex. Usuario.asp?id=1), suponhamos que o usuário fique mudando o ID de usa aplicação e possa visualizar algum outro registro que não fosse o dele, isso serio muito ruim, além de não ter a mínima segurança. Então, nos ciframos o número 1 que foi passado como parâmetro, mas dessa vez cifrado (Ex. Usuario.asp?id=vLyHARA8A0m2SknVd0azxw==). Como temos uma chave de até 32 posições, creio eu, que seria mais fácil alguém acertar na sena várias vezes do que acertar essa senha de uma forma aleatória, sendo que dentro as 32 posições nada impede de colocarmos caracteres especiais. Podemos também usar a criptografia para reduzirmos o uso de SQL INJECTION via QueryString. Uma outra prática muito usável seria armazenar senhas e outros dados sigilosos dentro do banco de dados. Neste caso, guardaríamos a senha cifrada no banco de dados, e no momento que o usuário for se logar temos que cifrar a senha e comparar com a cifra que está no banco de dados. Mesmo que alguém obtenha o seu banco de dados, ele nunca descobrirá as senhas, pois a chave está encapsulada dentro de sua aplicação. O.NET Framework fornece as seguintes classes que podem ser usadas para implementar um algoritmo de cifragem usando chave privada: 01. RC2CryptoServiceProvider (algoritmo RC2) Vamos criar um pequeno exemplo que irá cifrar e decifrar dados. Por Exemplo: Nome a ser cifrado: Fabrizio Gianfratti Inicie um novo projeto no VS.NET e escolha um projeto do tipo Asp.net Web Application usando VB.NET. Crie um novo WebForm com o nome de Default.asp e siga os passos abaixo. Imports System.Security.Cryptography
' ***************************************** ' **************************************************** Private ChaveSecreta As String = "0987612345!@#$%¨&*" ' **************************************************** Dim Texto As String = "Fabrizio Gianfratti" ' **************************************************** Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Private Function Cifrar(ByVal vstrTextToBeEncrypted As String, ByVal vstrEncryptionKey As String) As String Dim bytValue() As Byte
vstrTextToBeEncrypted = TiraCaracteresNulos(vstrTextToBeEncrypted) ' **************************************************** bytValue = Encoding.ASCII.GetBytes(vstrTextToBeEncrypted.ToCharArray) intLength = Len(vstrEncryptionKey) ' **************************************************** If intLength >= 32 Then bytKey = Encoding.ASCII.GetBytes(vstrEncryptionKey.ToCharArray) objRijndaelManaged = New RijndaelManaged ' ***************************************************** Try objCryptoStream = New CryptoStream(objMemoryStream, objRijndaelManaged.CreateEncryptor(bytKey, bytIV), CryptoStreamMode.Write) objCryptoStream.FlushFinalBlock() bytEncoded = objMemoryStream.ToArray End Try ' ***************************************************** Return Convert.ToBase64String(bytEncoded) End Function ' ***************************************************** Private Function Decifrar(ByVal vstrStringToBeDecrypted As String, ByVal vstrDecryptionKey As String) As String Dim bytDataToBeDecrypted() As Byte Dim intLength As Integer ' ***************************************************** bytDataToBeDecrypted = Convert.FromBase64String(vstrStringToBeDecrypted) ' ***************************************************** intLength = Len(vstrDecryptionKey) If intLength >= 32 Then bytDecryptionKey = Encoding.ASCII.GetBytes(vstrDecryptionKey.ToCharArray) ReDim bytTemp(bytDataToBeDecrypted.Length) objMemoryStream = New MemoryStream(bytDataToBeDecrypted) ' ****************************************************** Try objCryptoStream = New CryptoStream(objMemoryStream, _ objCryptoStream.Read(bytTemp, 0, bytTemp.Length) objCryptoStream.FlushFinalBlock() Catch End Try ' **************************************************** Return TiraCaracteresNulos(Encoding.ASCII.GetString(bytTemp)) End Function ' **************************************************** Private Function TiraCaracteresNulos(ByVal vstrStringWithNulls As String) As String Dim intPosition As Integer intPosition = 1 Do While intPosition > 0 If intPosition > 0 Then If intPosition > strStringWithOutNulls.Length Then Return strStringWithOutNulls End Function End Class O download do código encontra-se logo abaixo!Bom, é isso pessoal. Espero que tenham gostado da matéria e, principalmente, que tenha sido útil a todos. Arquivos anexos ao artigo
Carlos Nogueira <caednogueira@hotmail.com>
Excelente tutorial, com o exemplo dado aqui pode notar a facilidade que o .NET oferece e a praticidade de implementação.
Parabenizo-o Fabrício pela tutorial... fantático ![]() ![]() ![]() ![]() ![]() Leandro Rafael <le_lopes@terra.com.br>
Parabens Fabricio...
Ótimo Post!!! ![]() ![]() ![]() ![]() ![]() ![]() |
|
|