El ensamblado lo creo:
CREATE ASSEMBLY Encriptador
FROM 'D:\Proyectos\Test\Encriptacion\Encriptacion\bin\Release\Encriptacion.dll'
WITH PERMISSION_SET = SAFE
go
La función la creo:
CREATE FUNCTION fc_Desencriptar
(
@cadena nvarchar(50)
)
RETURNS nvarchar(50)
AS EXTERNAL NAME Encriptador.[Encriptacion.Encriptacion].DesencriptarCadena
La clase encripta y desencripta utilizando los namespaces:
Imports System.Security.Cryptography
Imports System.Text
Imports System.IO
La función es la siguiente:
Public Shared Function DesencriptarCadena(ByVal InputString As String) As
String
If InputString = String.Empty Then
Return ""
Else
Dim Des As New TripleDESCryptoServiceProvider
'Put the string into a byte array
Dim InputbyteArray(CType(InputString.Length / 2 - 1, Integer)) As
Byte '= Encoding.UTF8.GetBytes(InputString)
'Create the crypto objects, with the key, as passed in
Dim hashMD5 As New MD5CryptoServiceProvider
Des.Key = hashMD5.ComputeHash(ASCIIEncoding.ASCII.GetBytes("CLAVE"))
Des.Mode = CipherMode.ECB
'Put the input string into the byte array
Dim X As Integer
For X = 0 To InputbyteArray.Length - 1
Dim IJ As Int32 = (Convert.ToInt32(InputString.Substring(X * 2,
2), 16))
Dim BT As New System.ComponentModel.ByteConverter()
InputbyteArray(X) = New Byte
InputbyteArray(X) = CType(BT.ConvertTo(IJ, GetType(Byte)), Byte)
Next
Dim ms As MemoryStream = New MemoryStream
Dim cs As CryptoStream = New CryptoStream(ms,
Des.CreateDecryptor(), _
CryptoStreamMode.Write)
'Flush the data through the crypto stream into the memory stream
cs.Write(InputbyteArray, 0, InputbyteArray.Length)
cs.FlushFinalBlock()
'//Get the decrypted data back from the memory stream
Dim ret As StringBuilder = New StringBuilder
Dim B() As Byte = ms.ToArray
ms.Close()
Dim I As Integer
For I = 0 To UBound(B)
ret.Append(Chr(B(I)))
Next
Return ret.ToString()
End If
End Function
Estoy utilizando el SQL 2005.
___________________________________________
Sebastian Villalba
Award Support S.R.L.
[EMAIL PROTECTED]
Tel/Fax: 4541-0503 y lineas rotativas
___________________________________________
-----Original Message-----
From: [email protected] [mailto:[EMAIL PROTECTED] On Behalf Of Maxi Accotto
Sent: Miércoles, 20 de Junio de 2007 05:12 p.m.
To: Carlos S. Villalba
Subject: [dbms] Usar Assembly
Podrias poner el codigo? que sql usas?
El 20/06/07, Carlos S. Villalba <[EMAIL PROTECTED]> escribió:
> En el reporte utilizar la DLL???, uuy eso si que no se hacerlo. Te aclaro que
> es Crystal report, igual ya solucione el error que publique, ahora estoy
> peleando con otro error:
>
> Mens 6522, Nivel 16, Estado 1, Procedimiento fc_Desencriptar, Línea 0
> Error de .NET Framework durante la ejecución de la rutina o agregado definido
> por el usuario 'fc_Desencriptar':
> System.Security.HostProtectionException: Attempted to perform an operation
> that was forbidden by the CLR host.
>
> The protected resources (only available with full trust) were: All
> The demanded resources were: SharedState
>
> La función la cree correctamente. El error lo tira cuando la quiero usar
>
> ___________________________________________
>
> Sebastian Villalba
> Award Support S.R.L.
> [EMAIL PROTECTED]
> Tel/Fax: 4541-0503 y lineas rotativas
> ___________________________________________
> -----Original Message-----
> From: [email protected] [mailto:[EMAIL PROTECTED] On Behalf Of Maxi Accotto
> Sent: Miércoles, 20 de Junio de 2007 04:34 p.m.
> To: Carlos S. Villalba
> Subject: [dbms] Usar Assembly
>
> Sebastian, yo no te recomendaria resolverlo asi, una forma seria en el
> reporte que este use la funcion dll, si igual lo queres hacer con SQL
> vas a tener que usar SQL2005
>
> El 20/06/07, Carlos S. Villalba <[EMAIL PROTECTED]> escribió:
> >
> >
> >
> > Que tal gente:
> >
> > Necesito consumir por medio de una función o
> > un stored procedure, una dll. Tengo muchas dudas al respecto, y son las
> > siguientes:
> >
> > Antes que nada explico lo que quiero hacer. Tengo un reporte
> > que muestra un listado, uno de los campos que muestra esta encriptado, y yo
> > lo quiero mostrar desencriptado. El tema es que yo a ese campo lo guardo
> > encriptado por medio de una función que realice en .NET. Ahora esa misma
> > función la quiero consumir por medio de una función o un stored procedure.
> >
> > - Mi dll es de .NET y lo que hace es encriptar y desencriptar una
> > cadena. Yo utilizaría la función Desencriptar solamente.
> >
> > - Yo llego crear el assembly de la siguiente manera:
> >
> >
> >
> > CREATE ASSEMBLY Encriptador
> >
> > FROM
> > 'D:\Proyectos\Test\Encriptacion\Encriptacion\bin\Release\Encriptacion.dll'
> >
> > WITH PERMISSION_SET = SAFE
> >
> >
> >
> > Hasta aca va todo bien.
> >
> > - Cuando quiero crear una función:
> >
> >
> >
> > CREATE FUNCTION fc_Desencriptar
> >
> > (
> >
> > @cadena varchar(50),
> >
> > @llave varchar(50)
> >
> > )
> >
> > RETURNS varchar(50)
> >
> > AS EXTERNAL NAME Encriptador.Encriptacion.DesencriptarCadena
> >
> >
> >
> > me dice: No se encontró el tipo 'Encriptacion' en el ensamblado
> > 'Encriptacion'.
> >
> >
> >
> > La clase se llama Encriptacion y tiene 2 funciones que se llaman:
> > EncriptarCadena, y DesencriptarCadena.
> >
> > Mi preguntas son, en la clase .NET tengo que especificar algo como para que
> > el SQL lo utilice??, que puede llegar a ser este error??.
> >
> >
> >
> > Desde ya muchas gracias. Espero puedan darme alguna pequeña respuesta.
> > Gracias.
> >
> >
> >
> > ___________________________________________
> >
> >
> >
> > Sebastian Villalba
> >
> > Award Support S.R.L.
> >
> > [EMAIL PROTECTED]
> >
> > Tel/Fax: 4541-0503 y lineas rotativas
> >
> > ___________________________________________
>
>
> --
> -----------------------------------------------------------
> Microsoft MVP en SQL Server
> Mentor asociado en SQLTotalConsulting
> (excelencia en servicios y consultoria SQLServer)
> Orador Culminis - Microsoft Influencier
> www.sqltotalconsulting.com
> -----------------------------------------------------------
>
>
>
--
-----------------------------------------------------------
Microsoft MVP en SQL Server
Mentor asociado en SQLTotalConsulting
(excelencia en servicios y consultoria SQLServer)
Orador Culminis - Microsoft Influencier
www.sqltotalconsulting.com
-----------------------------------------------------------