일반 텍스트 유형으로 ENCRYPTBYKEY 최대 반환 값을 결정할 수 있습니까?

gotqn

기존 테이블의 여러 필드를 암호화하려고합니다. 기본적으로 다음 암호화 기술이 사용됩니다.

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의 반환 varbinary8,000 바이트의 최대 크기. 암호화 할 예정 테이블 필드 알고 (예 : nvarchar(128), varchar(31), bigint) 어떻게 새로운 정의 할 수 있습니다 varbinary종류의 길이를?

Maarten Bodewes

여기 에서 전체 사양을 볼 수 있습니다.

따라서 계산해 보겠습니다.

  • 16 바이트 키 UID
  • _4 바이트 헤더
  • 16 바이트 IV (AES의 경우 16 바이트 블록 암호)

그리고 암호화 된 메시지의 크기 :

  • _4 바이트 매직 넘버
  • _2 바이트 무결성 바이트 길이
  • _0 바이트 무결성 바이트 (경고 : 테이블에 잘못 배치 될 수 있음)
  • _2 바이트 (일반 텍스트) 메시지 길이
  • _m 바이트 (일반 텍스트) 메시지
  • CBC 패딩 바이트

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은 메시지 입력입니다.


메모:

  • 헤더의 첫 번째 바이트에는 스키마의 버전 번호가 포함되어 있습니다. 이 답변이 수행 되지수 없습니다 추가하거나 다른 내부 메시지 형식 또는 암호화 기법이 사용되는 경우 제거 될 것입니다 얼마나 많은 바이트 지정;
  • DB 필드를 변경으로부터 보호하려는 경우 무결성 바이트를 사용하는 것이 좋습니다 (계정의 금액을 기밀로 유지하는 것이 금액을 변경할 수 없는지 확인하는 것보다 덜 중요합니다).
  • 페이지의 예에서는 텍스트 문자에 대해 1 바이트 인코딩을 가정합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

함수 결과 대신 배열의 텍스트 값을 어떻게 반환할 수 있습니까?

값으로 반환하는 대신 C ++에서 반환시 스왑을 수행 할 수 있습니까?

조건으로 그룹화하고 소스 유형 값을 반환할 수 있습니까?

트레이 트 정의에서 함수의 반환 유형으로`impl Trait`을 사용할 수 있습니까?

복잡한 반환 유형에 대해 명명 된 반환 값 최적화를 사용할 수 있습니까?

스타일을 변경하지 않고 html을 일반 텍스트로 변환할 수 있습니까?

Go의 단일 값 컨텍스트에서 선택적으로 반환 값을 가져올 수 있습니까?

CouchDB는 기본적으로 일반 텍스트를 json 형식으로 변환 할 수 있습니까?

클래스 자체의 기능 내에서 할당된 값을 기반으로 클래스 필드의 유형을 결정할 수 있습니까?

일반 유형을 복합 컴포넌트 속성 태그의 "유형"으로 사용할 수 있습니까?

일반 나머지 유형으로 유형을 생성할 수 있습니까?

일반 수퍼 클래스의 특정 하위 클래스에 대한 실제 반환 유형을 어떻게 확인할 수 있습니까?

값으로 반환 할 수있는 메모리 효율적인 VLA 유형을 만들 수 있습니까?

Swift에서 반환 유형을 특정 유형의 컬렉션으로 지정할 수 있습니까?

grpc 스트림의 반환 유형을 결정할 수 없습니다.

Java의 다른 클래스에서 동일한 유형의 열거 형을 일반적으로 변환 할 수 있습니까?

바이너리 파일 / 스트림 / 파일 이름을 가져 와서 읽을 수있는 텍스트 형식으로 변환하는 함수에 대한 적절한 인수 / 반환 유형은 무엇입니까?

Go에서 함수의 여러 반환 값에 대해 유형 변환을 수행 할 수 있습니까?

다른 속성 값을 기반으로 클래스 속성 유형을 암시할 수 있습니까?

새로운 ASP.NET 5 (ASP.NET MVC 6) 프로젝트 유형이 일반 .NET을 대상으로 할 수 있습니까?

반환 유형이 const 일 때 반환 된 값을 수정할 수있는 이유는 무엇입니까?

순수 가상 함수의 반환 유형으로 추상 유형을 사용할 수 있습니까?

함수의 반환 유형을 변수 유형으로 사용할 수 있습니까?

일반 유형으로 Flink의 AggregateFunction을 구현할 수 있습니까?

클로저를 사용하여 반환 식 유형을 반환 유형으로 변환 할 수 없습니까?

함수 인수 유형에서 정의 된 매핑을 기반으로 함수 반환 유형을 정의 할 수 있습니까?

Fn과 같은 인수 및 반환 유형으로 특성을 어떻게 정의 할 수 있습니까?

열거 형이 정수 대신 문자열을 반환 할 수 있습니까?

ArrayList 반복기가 다음에 반환 할 객체 유형을 어떻게 결정할 수 있습니까?