기존 테이블의 여러 필드를 암호화하려고합니다. 기본적으로 다음 암호화 기술이 사용됩니다.
CREATE MASTER KEY ENCRYPTION
BY PASSWORD = 'sm_long_password@'
GO
CREATE CERTIFICATE CERT_01
WITH SUBJECT = 'CERT_01'
GO
CREATE SYMMETRIC KEY SK_01
WITH ALGORITHM = AES_256 ENCRYPTION
BY CERTIFICATE CERT_01
GO
OPEN SYMMETRIC KEY SK_01 DECRYPTION
BY CERTIFICATE CERT_01
SELECT ENCRYPTBYKEY(KEY_GUID('SK_01'), 'test')
CLOSE SYMMETRIC KEY SK_01
DROP SYMMETRIC KEY SK_01
DROP CERTIFICATE CERT_01
DROP MASTER KEY
ENCRYPTBYKEY의 반환 varbinary
8,000 바이트의 최대 크기. 암호화 할 예정 테이블 필드 알고 (예 : nvarchar(128)
, varchar(31)
, bigint
) 어떻게 새로운 정의 할 수 있습니다 varbinary
종류의 길이를?
여기 에서 전체 사양을 볼 수 있습니다.
따라서 계산해 보겠습니다.
16
바이트 키 UID_4
바이트 헤더16
바이트 IV (AES의 경우 16 바이트 블록 암호)그리고 암호화 된 메시지의 크기 :
_4
바이트 매직 넘버_2
바이트 무결성 바이트 길이_0
바이트 무결성 바이트 (경고 : 테이블에 잘못 배치 될 수 있음)_2
바이트 (일반 텍스트) 메시지 길이_m
바이트 (일반 텍스트) 메시지 CBC 패딩 바이트는 다음과 같은 방법으로 계산해야합니다.
16 - ((m + 4 + 2 + 2) % 16)
패딩은 항상 적용됩니다. 이로 인해 1..16 범위의 패딩 바이트 수가 생성됩니다. 교활한 지름길은 총 16 바이트를 추가하는 것이지만 사용되지 않는 최대 15 바이트를 지정한다는 의미 일 수 있습니다.
이것을 36 + 8 + m + 16 - ((m + 8) % 16)
또는로 줄일 수 있습니다 60 + m - ((m + 8) % 16
. 또는 위에 지정된 작은 트릭을 사용하고 낭비되는 바이트에 대해 신경 쓰지 않는 경우 : 76 + m
여기서 m은 메시지 입력입니다.
메모:
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다