SQL Server 데이터의 암호화와 복호화

SQL Server 데이터의 암호화와 복호화

SQL Server에서 데이터의 암호화와 복호화에 대해서 검증한 내용을 정리해 보았습니다.

0. 전제조건

1. 검증용 DB작성(localDB)

0050-1.png

2. 검증용 테이블 작성

0050-2.png

USE [TESTDB01]
GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[Table_1](
	[ID] [int] IDENTITY(1,1) NOT NULL,
	[Name] [nvarchar](500) NULL,
	[NameEnc] [varbinary](2000) NULL
) ON [PRIMARY]

GO
※암호화 한 데이터의 datatype은 varbinary。

3. 각종 언어를 사용해서 테스트용 데이터를 작성

0050-3.png

INSERT문은 반드시 N을 붙여서 nvarchar로 등록함.

INSERT INTO [dbo].[Table_1]([Name]) VALUES (N'Name');
※datatype을 nvarchar로 등록하지 않으면 Char로 등록되어서 “???”같이 내용이 깨진다.

4. 암호화

※’ENCRYPT’ <- 여기에 임의의 암호키를 설정

UPDATE [dbo].[Table_1] SET [NameEnc] = ENCRYPTBYPASSPHRASE('ENCRYPT',Name);

0050-4.png

※Name의 datatype이 nvarchar이기 때문에 ENCRYPTBYPASSPHRASE에 의해 nvarchar의 속성으로 암호화 된다.

문자열을 직접 입력해서 암호화 하고 싶은 경우엔 N’…’ <- 와 같이 설정한다.

UPDATE [dbo].[Table_1] SET [NameEnc] = ENCRYPTBYPASSPHRASE('ENCRYPT',N'암호화 하고 싶은 내용');

5. 복호화

※’ENCRYPT’ <- 여기에 4에서 설정한 암호키를 설정

SELECT [ID], [Name], [NameEnc]
  , CAST(DECRYPTBYPASSPHRASE('ENCRYPT',NameEnc) AS nvarchar(2000)) AS NameDec
FROM [TESTDB01].[dbo].[Table_1]

0050-5.png

※복호화 한 다음 nvarchar 변환처리를 넣는다.

이상


보충 : MySQL의 경우

암호화

CAST(HEX(AES_ENCRYPT('암호화 할 데이터', '암호key')) AS CHAR)

복호화

CAST(AES_DECRYPT(UNHEX('복호화 할 데이터'), '암호Key') AS CHAR)

Pie's Tech Note

생계형 개발자의 메모장

comments powered by Disqus

    rss facebook twitter github youtube mail spotify instagram linkedin google google-plus pinterest medium vimeo stackoverflow reddit quora