문제

Informix SQL의 열 값에 대한 일종의 해시 또는 체크섬 값을 계산하고 싶습니다.

문제 :

테스트 데이터에서 개인 정보를 익명화해야하며 다음과 같이 관련 값을 해싱하여 그렇게하고 싶습니다.

UPDATE personal_data SET name=HASH(name), employee_no=HASH(employee_no)

고정 값이 아닌 해시를 사용하려고합니다. 다른 값이 다른 결과에 (일반적으로) 다른 결과에 매핑되고 동일한 값이 동일한 결과에 매핑되는 데 유용하기 때문입니다. 따라서 여전히 테스트 데이터를 비교할 수 있습니다 (예 : 동일한 Employee_NO를 가진 여러 레코드를 가질 수 있으며 해당 정보를 보존하는 것이 유용합니다).

대부분의 DBM에는 일종의 해싱 기능이 있습니다 (PostgreSQL 및 MySQL에는 MD5 ()가 있고 Oracle은 dbms_utility.get_hash_value가 있지만 Informix에 대해서는 아무것도 찾을 수 없습니다 (Informix IDS 9). 누락 된 기능입니까?

도움이 되었습니까?

해결책

ID에는 내장 함수 인 Afaicr로 노출 된 해시 기능이 없습니다.

IBM Informix Dynamic Server (IDS) 버전 10. 10.00을 사용한다고 가정하면 (이전 버전은 지원되지 않습니다. 정의 된 루틴) 작업을 수행합니다. 이것은 엄청나게 어렵지는 않지만 사소한 것도 아닙니다.

다른 팁

Sleske,

몇 년 전, 나는 SHA-1 해시를 계산하기 위해 T-SQL 기능을 작성했습니다. 그것이 당신을 위해 작동한다면, 당신은 정보를 위해 내 기능을 재 작업 할 수 있습니다. 이 뉴스 그룹 스레드 한계에 대한 정보가 조금 더 있습니다.

create function S( 
  @N int, 
  @x bigint 
) returns binary(4) as begin 
  declare @two_N bigint 
  set @two_N = power(cast(2 as bigint), @N) 
  declare @two_32_N bigint 
  set @two_32_N = power(cast(2 as bigint), 32-@N) 
  return cast(@x%@two_32_N*@two_N + @x/@two_32_N as binary(4)) 
end 
go 
create function f( 
  @t bigint, 
  @B bigint, 
  @C bigint, 
  @D bigint 
) returns bigint as begin 
  declare @2_32 bigint set @2_32 = power(cast(2 as bigint),32) 
  if @t between 0 and 19 
    return (@B & @C) | ((@2_32-@B-1) & @D) 
  if @t between 20 and 39 
    return @B ^ @C ^ @D 
  if @t between 40 and 59 
    return (@B & @C) | (@B & @D) | (@C & @D) 
  return @B ^ @C ^ @D 
end 
go 
create function SHA1 ( 
  @s varchar(55) 
) returns binary(20) as begin 
  declare @b varbinary(55) 
  set @b = cast(@s as varbinary(55)) 
  declare @zeros binary(64) 
  set @zeros = 0x 
  declare @padded binary(64) 
  set @padded = 
    @b + 0x80 + substring(@zeros,1,55-datalength(@b)) 
       + cast(8*datalength(@b) as binary(8)) 
  declare @H5 binary(20) 
  set @H5 = 0x67452301EFCDAB8998BADCFE10325476C3D2E1F0 
  declare @K4 binary(16) 
  set @K4 = 0x5A8279996ED9EBA18F1BBCDCCA62C1D6 
  declare @ABCDE binary(20) set @ABCDE = @H5 
  declare @W80   varbinary(320) set @W80 = @padded 
  declare @TEMP  binary(4) set @TEMP = 0x 
  declare @2_32 bigint set @2_32 = power(cast(2 as bigint),32) 
  declare @t int 
  set @t = 16 
  while @t < 80 begin 
    set @W80 = @W80 + 
      dbo.S(1,cast(substring(@W80,(@t-3)*4+1,4) as bigint) 
             ^cast(substring(@W80,(@t-8)*4+1,4) as bigint) 
             ^cast(substring(@W80,(@t-14)*4+1,4) as bigint) 
             ^cast(substring(@W80,(@t-16)*4+1,4) as bigint)) 
    set @t = @t + 1 
  end 
  set @t = 0 
  while @t < 80 begin 
    set @TEMP = cast((cast(dbo.S(5,substring(@ABCDE,1,4)) as bigint) 
          + dbo.f(@t,substring(@ABCDE,5,4) 
                    ,substring(@ABCDE,9,4) 
                    ,substring(@ABCDE,13,4)) 
          + cast(substring(@ABCDE,17,4) as bigint) 
          + cast(substring(@W80,4*@t+1,4) as bigint) 
          + cast(substring(@K4,4*(@t/20)+1,4) as bigint))%@2_32 as 
binary(4)) 
    set @ABCDE = @TEMP+substring(@ABCDE,1,4) 
                  +dbo.S(30,substring(@ABCDE,5,4)) 
                  +substring(@ABCDE,9,8) 
    set @t = @t + 1 
  end 
  set @H5 
  = cast((cast(substring(@H5, 1,4) as bigint) + cast(substring(@ABCDE, 1,4) 
as bigint))% @2_32 as binary(4)) 
  + cast((cast(substring(@H5, 5,4) as bigint) + cast(substring(@ABCDE, 5,4) 
as bigint))% @2_32 as binary(4)) 
  + cast((cast(substring(@H5, 9,4) as bigint) + cast(substring(@ABCDE, 9,4) 
as bigint))% @2_32 as binary(4)) 
  + cast((cast(substring(@H5,13,4) as bigint) + cast(substring(@ABCDE,13,4) 
as bigint))% @2_32 as binary(4)) 
  + cast((cast(substring(@H5,17,4) as bigint) + cast(substring(@ABCDE,17,4) 
as bigint))% @2_32 as binary(4)) 
  return @H5 
end 

당신이 사용할 수있는 Encrypt_tdes. 암호화 된 문자열은 원래보다 훨씬 길지만 문제가되지 않아야합니다. 값은 잘립니다. 암호화 + 잘림은 해시 값과 유사한 결과를 얻어야합니다. 암호화가 9.40에서 사용할 수 있는지 확실하지 않습니다. 이 경우 클라이언트의 해시 값을 계산해야합니다.

테이블 구조를 변경할 수 있다면 Vercols 옵션과 함께 사용할 수 있습니다. 보다 With Vercols 옵션 사용. 간단히 말해서 :이 옵션은 2 개의 추가 숨겨진 열 : 원래 삽입 된 행의 체크섬 및 행의 변경 수 (업데이트)를 제공합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top