레이블이 암호화인 게시물을 표시합니다. 모든 게시물 표시
레이블이 암호화인 게시물을 표시합니다. 모든 게시물 표시

2022년 5월 2일 월요일

ASP - 암호화/암호 해독 기능


' Encrypt and decrypt functions for classic ASP (by TFI)


'********* set a random string with random length ***********

cryptkey = "GNQ?4i0-*\CldnU+[vrF1j1PcWeJfVv4QGBurFK6}*l[H1S:oY\v@U?i,oD]f/n8oFk6NesH--^PJeCLdp+(t8SVe:ewY(wR9p-CzG<,Q/(U*.pXDiz/KvnXP`BXnkgfeycb)1A4XKAa-2G}74Z8CqZ*A0P8E[S`6RfLwW+Pc}13U}_y0bfscJ<vkA[JC;0mEEuY4Q,([U*XRR}lYTE7A(O8KiF8>W/m1D*YoAlkBK@`3A)trZsO5xv@5@MRRFkt\"


'**************************** ENCRYPT FUNCTION ******************************


'*** Note: bytes 255 and 0 are converted into the same character, in order to

'*** avoid a char 0 which would terminate the string


function encrypt(inputstr)

        Dim i,x

        outputstr=""

        cc=0

        for i=1 to len(inputstr)

                x=asc(mid(inputstr,i,1))

                x=x-48

                if x<0 then x=x+255

                x=x+asc(mid(cryptkey,cc+1,1))

                if x>255 then x=x-255

                outputstr=outputstr&chr(x)

                cc=(cc+1) mod len(cryptkey)

        next

        encrypt=server.urlencode(replace(outputstr,"%","%25"))

end function


'**************************** DECRYPT FUNCTION ******************************


function decrypt(byval inputstr)

        Dim i,x

        inputstr=urldecode(inputstr)

        outputstr=""

        cc=0

        for i=1 to len(inputstr)

                x=asc(mid(inputstr,i,1))

                x=x-asc(mid(cryptkey,cc+1,1))

                if x<0 then x=x+255

                x=x+48

                if x>255 then x=x-255

                outputstr=outputstr&chr(x)

                cc=(cc+1) mod len(cryptkey)

        next

        decrypt=outputstr

end function


'****************************************************************************


Function URLDecode(sConvert)

  Dim aSplit

  Dim sOutput

  Dim I

  If IsNull(sConvert) Then

         URLDecode = ""

         Exit Function

  End If

  'sOutput = REPLACE(sConvert, "+", " ") ' convert all pluses to spaces

  sOutput=sConvert

  aSplit = Split(sOutput, "%") ' next convert %hexdigits to the character

  If IsArray(aSplit) Then

        sOutput = aSplit(0)

        For I = 0 to UBound(aSplit) - 1

          sOutput = sOutput &  Chr("&H" & Left(aSplit(i + 1), 2)) & Right(aSplit(i + 1), Len(aSplit(i + 1)) - 2)

        Next

  End If

  URLDecode = sOutput

End Function


출처 : https://code-examples.net/ko/q/348e47



2018년 1월 18일 목요일

C# - MSSQL CLR (AES256 암호화)


using System;
using System.Text;
using System.Security.Cryptography;
using System.IO;

public partial class CryptoHelper
{
    /// <summary>
    /// AesManaged 생성
    /// </summary>
    /// <returns></returns>
    private static AesManaged GetAesManaged()
    {
        // 암호화에 사용할 32bytes 의 키 값.
        const string DEFAULT_KEY_ASE256 = "32자리 KEY 입력";

        return new AesManaged()
        {
            KeySize = 256,
            BlockSize = 128,
            Mode = CipherMode.CBC,
            Padding = PaddingMode.PKCS7,
            Key = System.Text.Encoding.UTF8.GetBytes(DEFAULT_KEY_ASE256),
            IV = new byte[] {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
        };
    }

    /// <summary>
    /// 암호화 AES256
    /// </summary>
    /// <param name="plainText"></param>
    /// <returns></returns>
    [Microsoft.SqlServer.Server.SqlFunction]
    public static string EncryptAES256(string inputText)
    {
        if (string.IsNullOrWhiteSpace(inputText))
            return null;

        byte[] encrypted;
        AesManaged aesAlg = GetAesManaged();

        ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);

        using (MemoryStream msEncrypt = new MemoryStream())
        {
            using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
            {
                using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
                {
                    swEncrypt.Write(inputText);
                }
                encrypted = msEncrypt.ToArray();
            }
        }

        return Convert.ToBase64String(encrypted);
    }

    /// <summary>
    /// 복호화 AES256
    /// </summary>
    /// <param name="plainText"></param>
    /// <returns></returns>
    [Microsoft.SqlServer.Server.SqlFunction]
    public static string DecryptAES256(string inputText)
    {
        if (string.IsNullOrWhiteSpace(inputText))
            return null;

        string plaintext = null;
        byte[] cipherText = Convert.FromBase64String(inputText);
        AesManaged aesAlg = GetAesManaged();

        ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);

        using (MemoryStream msDecrypt = new MemoryStream(cipherText))
        {
            using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
            {
                using (StreamReader srDecrypt = new StreamReader(csDecrypt))
                {
                    plaintext = srDecrypt.ReadToEnd();
                }
            }
        }

        return plaintext;
    }

    /// <summary>
    /// 단방향 암호화 (SHA256)
    /// </summary>
    /// <param name="Data"></param>
    /// <returns></returns>
    [Microsoft.SqlServer.Server.SqlFunction]
    public static string SHA256Hash(string inputText)
    {
        StringBuilder sb = new StringBuilder();
        SHA256 sha = new SHA256Managed();
        byte[] hash = sha.ComputeHash(Encoding.ASCII.GetBytes(inputText));

        foreach (byte b in hash)
            sb.AppendFormat("{0:x2}", b);

        return sb.ToString();
    }

}





/*
EXEC sp_configure 'show advanced options', 1
GO

RECONFIGURE
GO

EXEC sp_configure 'clr enabled', 1
GO

RECONFIGURE
GO
*/

/*
-- DROP ASSEMBLY myEncrypt
CREATE ASSEMBLY myEncrypt FROM 'D:\CryptoProject\CryptoSQLProject.dll'
WITH PERMISSION_SET = SAFE
*/




/*
-- DROP FUNCTION dbo.fn_Encrypt
-- DROP FUNCTION dbo.fn_Decrypt

CREATE FUNCTION fn_Encrypt(@value NVARCHAR(MAX))
RETURNS NVARCHAR(MAX)
AS
EXTERNAL NAME myEncrypt.CryptoHelper.EncryptAES256
GO

CREATE FUNCTION fn_Decrypt(@value NVARCHAR(MAX))
RETURNS NVARCHAR(MAX)
AS
EXTERNAL NAME myEncrypt.CryptoHelper.DecryptAES256
GO
*/



/*
SELECT *
FROM sys.assemblies

SELECT dbo.fn_Encrypt('123-12-123456')
SELECT dbo.fn_Decrypt('Jsh3QXSLqiv2U5q1wF+gEw==')
*/




MSSQL - Cursor vs Temp Table

#테이블 변수사용의 예 use pubs go declare @tmptable table (     nid int identity(1,1) not null,     title varchar (80) not null ) -- 테이블 변수 선언 inse...