Avatar billede pixy Nybegynder
07. juni 2006 - 09:13 Der er 10 kommentarer og
1 løsning

SQL og MD5

Hejsa.

jeg har brug for at kunne MD5'e en værdi direkte i min SQL query. Pseudo SQL :

SELECT MD5("FeltNavn") FROM Table

Dette er nødvændigt, da miljøet som kalder sætningen ikke selv har nogen MD5 algoritme. Nogen der ved ovenstående er muligt ?
Avatar billede ldanielsen Nybegynder
07. juni 2006 - 09:57 #1
Er ved at kigge på dette ...  :

http://www.codeproject.com/database/xp_md5.asp
Avatar billede pixy Nybegynder
07. juni 2006 - 10:01 #2
Jep. Fandt også den artikel.
Stored procedures kan gøre det, og det er nok den eneste måde at fikse det på.
Avatar billede ldanielsen Nybegynder
07. juni 2006 - 10:04 #3
Det ser ud til at virke perfekt

Følg blot vejledningen
Avatar billede ldanielsen Nybegynder
07. juni 2006 - 10:05 #4
Bemærk at du ender med at have en UDF, ikke en SP, så du kan netop dette:

SELECT dbo.MD5(strFeltNavn) FROM Table
Avatar billede pixy Nybegynder
07. juni 2006 - 10:06 #5
Det må være måden jeg ordner det på. Smid et svar, hvis du vil have point =)
Avatar billede ldanielsen Nybegynder
07. juni 2006 - 10:59 #6
Tak for det :o)
Avatar billede arne_v Ekspert
09. juni 2006 - 02:34 #7
du er ikke tilfældigvis på 2005 ?  (fordi så kan det laves nemmere)
Avatar billede pixy Nybegynder
09. juni 2006 - 07:55 #8
Jo arne, jeg er faktisk på en 2005'er... ?
Avatar billede arne_v Ekspert
09. juni 2006 - 13:20 #9
i SQLServer 2005 kan man lave SP (og UDF formoder jeg) i C#/VB.NET og da .NET
har indbygget MD5 support så burde man kunne klare sig med 10-20 linier
kode
Avatar billede arne_v Ekspert
10. juni 2006 - 04:28 #10
using System;
using System.Data.Sql;
using System.Data.SqlTypes;
using System.Data.SqlClient;
using System.Text;
using System.Security.Cryptography;

using Microsoft.SqlServer.Server;

namespace E
{
    public class Hash
    {
        private static readonly Encoding utf8 = new UTF8Encoding();
        private static readonly MD5 md5 = new MD5CryptoServiceProvider();
        [SqlFunction]
        public static SqlString MD5Calc(string s)
        {
            byte[] binres = md5.ComputeHash(utf8.GetBytes(s));
            StringBuilder res = new StringBuilder("");
            for(int i = 0; i < binres.Length; i++)
            {
                res.Append(String.Format("{0:x2}", binres[i]));
            }
            return res.ToString();
        }
    }
}
Avatar billede arne_v Ekspert
10. juni 2006 - 04:29 #11
build:

csc /t:library MyUDF.cs

add UDF:

CREATE ASSEMBLY MyUDF FROM 'C:\E\MyUDF.dll' WITH PERMISSION_SET = SAFE
GO
CREATE FUNCTION MD5(@val NVARCHAR(1000))
RETURNS NVARCHAR(50)
AS
EXTERNAL NAME MyUDF.[E.Hash].MD5Calc
GO

remove UDF:

DROP FUNCTION MD5
GO
DROP ASSEMBLY MyUDF
GO
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester