PROBLEMAS EM CLASSE - CRIPTOGRAFIA
Fala pessoal blz, tenho a classe abaixo que é bem simples, peguei até na NET só não me recordo agora...
Seguinte, estou alterando a classe para ler a chave de criptografia direto do APP.CONFIG quando precisar codificar com um chave nova não preciso alterar no fonte....
O problema é que quando eu coloco para ler direto do APP.CONFIG ele dá erro (Constant expression. is required).
O problema está aqui :
Private Const key As String = ConfigurationManager.AppSettings([Ô]ChaveCriptorgrafia[Ô]).ToString()
Quando eu altero para, ele dá erro na classe
Private shared key As String = ConfigurationManager.AppSettings([Ô]ChaveCriptorgrafia[Ô]).ToString()
[ô]CLASSE
Imports System.Text
Imports System.Security.Cryptography
Imports System.Configuration
Public Class clsCriptografia
Private Const key As String = ConfigurationManager.AppSettings([Ô]ChaveCriptorgrafia[Ô]).ToString()
Private Shared TripleDES As New TripleDESCryptoServiceProvider
Private Shared MD5 As New MD5CryptoServiceProvider
[ô][ô][ô] <summary>
[ô][ô][ô] Calcula o MD5 Hash
[ô][ô][ô] </summary>
[ô][ô][ô] <param name=[Ô]value[Ô]>Chave</param>
Public Shared Function MD5Hash(ByVal value As String) As Byte()
[ô] Converte a chave para um array de bytes
Dim byteArray() As Byte = ASCIIEncoding.ASCII.GetBytes(value)
Return MD5.ComputeHash(byteArray)
End Function
[ô][ô][ô] <summary>
[ô][ô][ô] Encripta uma string com base em uma chave
[ô][ô][ô] </summary>
[ô][ô][ô] <param name=[Ô]stringToEncrypt[Ô]>String a encriptar</param>
Public Shared Function Encrypt(ByVal stringToEncrypt As String) As String
Try
[ô] Definição da chave e da cifra (que neste caso é Electronic
[ô] Codebook, ou seja, encriptação individual para cada bloco)
TripleDES.Key = clsCriptografia.MD5Hash(key)
TripleDES.Mode = CipherMode.ECB
[ô] Converte a string para bytes e encripta
Dim Buffer As Byte() = ASCIIEncoding.ASCII.GetBytes(stringToEncrypt)
Return Convert.ToBase64String(TripleDES.CreateEncryptor().TransformFinalBlock(Buffer, 0, Buffer.Length))
Catch ex As Exception
MessageBox.Show(ex.Message, My.Application.Info.Title, MessageBoxButtons.OK, MessageBoxIcon.Error)
Return String.Empty
End Try
End Function
[ô][ô][ô] <summary>
[ô][ô][ô] Desencripta uma string com base em uma chave
[ô][ô][ô] </summary>
[ô][ô][ô] <param name=[Ô]encryptedString[Ô]>String a decriptar</param>
Public Shared Function Decrypt(ByVal encryptedString As String) As String
Try
[ô] Definição da chave e da cifra
TripleDES.Key = clsCriptografia.MD5Hash(key)
TripleDES.Mode = CipherMode.ECB
[ô] Converte a string encriptada para bytes e decripta
Dim Buffer As Byte() = Convert.FromBase64String(encryptedString)
Return ASCIIEncoding.ASCII.GetString(TripleDES.CreateDecryptor().TransformFinalBlock(Buffer, 0, Buffer.Length))
Catch ex As Exception
MessageBox.Show(ex.Message, My.Application.Info.Title, MessageBoxButtons.OK, MessageBoxIcon.Error)
Return String.Empty
End Try
End Function
End Class
Seguinte, estou alterando a classe para ler a chave de criptografia direto do APP.CONFIG quando precisar codificar com um chave nova não preciso alterar no fonte....
O problema é que quando eu coloco para ler direto do APP.CONFIG ele dá erro (Constant expression. is required).
O problema está aqui :
Private Const key As String = ConfigurationManager.AppSettings([Ô]ChaveCriptorgrafia[Ô]).ToString()
Quando eu altero para, ele dá erro na classe
Private shared key As String = ConfigurationManager.AppSettings([Ô]ChaveCriptorgrafia[Ô]).ToString()
[ô]CLASSE
Imports System.Text
Imports System.Security.Cryptography
Imports System.Configuration
Public Class clsCriptografia
Private Const key As String = ConfigurationManager.AppSettings([Ô]ChaveCriptorgrafia[Ô]).ToString()
Private Shared TripleDES As New TripleDESCryptoServiceProvider
Private Shared MD5 As New MD5CryptoServiceProvider
[ô][ô][ô] <summary>
[ô][ô][ô] Calcula o MD5 Hash
[ô][ô][ô] </summary>
[ô][ô][ô] <param name=[Ô]value[Ô]>Chave</param>
Public Shared Function MD5Hash(ByVal value As String) As Byte()
[ô] Converte a chave para um array de bytes
Dim byteArray() As Byte = ASCIIEncoding.ASCII.GetBytes(value)
Return MD5.ComputeHash(byteArray)
End Function
[ô][ô][ô] <summary>
[ô][ô][ô] Encripta uma string com base em uma chave
[ô][ô][ô] </summary>
[ô][ô][ô] <param name=[Ô]stringToEncrypt[Ô]>String a encriptar</param>
Public Shared Function Encrypt(ByVal stringToEncrypt As String) As String
Try
[ô] Definição da chave e da cifra (que neste caso é Electronic
[ô] Codebook, ou seja, encriptação individual para cada bloco)
TripleDES.Key = clsCriptografia.MD5Hash(key)
TripleDES.Mode = CipherMode.ECB
[ô] Converte a string para bytes e encripta
Dim Buffer As Byte() = ASCIIEncoding.ASCII.GetBytes(stringToEncrypt)
Return Convert.ToBase64String(TripleDES.CreateEncryptor().TransformFinalBlock(Buffer, 0, Buffer.Length))
Catch ex As Exception
MessageBox.Show(ex.Message, My.Application.Info.Title, MessageBoxButtons.OK, MessageBoxIcon.Error)
Return String.Empty
End Try
End Function
[ô][ô][ô] <summary>
[ô][ô][ô] Desencripta uma string com base em uma chave
[ô][ô][ô] </summary>
[ô][ô][ô] <param name=[Ô]encryptedString[Ô]>String a decriptar</param>
Public Shared Function Decrypt(ByVal encryptedString As String) As String
Try
[ô] Definição da chave e da cifra
TripleDES.Key = clsCriptografia.MD5Hash(key)
TripleDES.Mode = CipherMode.ECB
[ô] Converte a string encriptada para bytes e decripta
Dim Buffer As Byte() = Convert.FromBase64String(encryptedString)
Return ASCIIEncoding.ASCII.GetString(TripleDES.CreateDecryptor().TransformFinalBlock(Buffer, 0, Buffer.Length))
Catch ex As Exception
MessageBox.Show(ex.Message, My.Application.Info.Title, MessageBoxButtons.OK, MessageBoxIcon.Error)
Return String.Empty
End Try
End Function
End Class
O erro é bem claro, para declarar valor em uma constante, este valor não pode ser dinâmico(como vindo de um app.config), então simplesmente tire o [Ô]const[Ô] da declaração...
Já fiz isso, coloquei ele como Shared, mas na realidade o erro era mais [Ô]grotesco[Ô] ainda, eu coloquei a variável errada (ChaveCriptorgrafia) ao invés de (ChaveCriptografia).
Tópico encerrado , respostas não são mais permitidas