2017-01-11 3 views
0

В настоящее время тестируется функция SHA256, чтобы подготовить переменную для использования в другом приложении.SAS строчная строка SHA256

Пользователь запросил результат SHA256 в нижнем регистре. Я создал быструю запись для того, чтобы убедиться, что я могу преобразовать string-

data have; 
input first $ last $ dob $ 10. sex $; 
cards; 
test person 1955-07-31 1 
; 
run; 

Кажется, он не позволит строчной строки один раз прошел через функцию SHA.

Есть ли обходной путь для этого? Приведенная ниже попытка не дала желаемых результатов.

data have2; 
set have; 
source = catt(first,last,dob,sex); 
encryp = lowcase(sha256(source)); 
format encryp $hex64.; 
run; 

ответ

1

Ниже будет делать это с помощью put заявления с форматом внутри:

data have2; 
set have; 
encryp = lowcase(put(sha256(catt(first,last,dob,sex)),$hex64.)); 
run; 

Он покажет совершенно другой код шифрования по сравнению с вашим методом, но она остается неизменной.

data have; 
input first $ last $ dob $ 10. sex $; 
cards; 
test person 1955-07-31 1 
test person 1955-07-31 1 
test2 person 1977-08-11 2 
test3 person 1945-12-22 1 
; 
run; 

data have2; 
set have; 
new_encryp = lowcase(put(sha256(catt(first,last,dob,sex)),hex64.)); /* new method */ 
encryp = lowcase(sha256(catt(first,last,dob,sex))); /* what you tried */ 
format encryp $hex64.; 
run; 

/* output */ 
first last dob   sex new_encryp               encryp 
test person 7/31/1955 1 038a855a47f40edf54094adc4366e3e79c1a931346d7968e96d2cb930b01e7bc 039A857A67F40EDF74096AFC6366E3E79C1A931366D7969E96F2EB930B01E7BC 
test person 7/31/1955 1 038a855a47f40edf54094adc4366e3e79c1a931346d7968e96d2cb930b01e7bc 039A857A67F40EDF74096AFC6366E3E79C1A931366D7969E96F2EB930B01E7BC 
test2 person 8/11/1977 2 1117ab614f48a7edfbe9d615f12acad9d564b457b0f31bb2619f7eb9b10f1e58 1117AB616F68A7EDFBE9F615F12AEAF9F564B477B0F31BB261FF7EB9B10F1E78 
test3 person 12/22/1945 1 d1cb00ebe044c0553039f99592dc7bd4804eac2c13da8208fd82459c3a37efd1 F1EB00EBE064E0753039F99592FC7BF4806EAC2C13FA8208FD82659C3A37EFF1 
+0

Это правильный ответ, но ответы вроде этого не очень полезны, поскольку они не объясняют _why_, это правильный способ сделать это. – Joe

+0

@ Foxer, спасибо за быстрый поворот. +1 – SMW

2

Проблема не с функцией sha256, но с форматом $HEX64.

Когда вы использовали lowcase, вы нанесли какой-то вред на результат SHA256: вы не изменяете шестнадцатеричное представление, но вы фактически изменяете сами символы, что означает, что ваш результат неточен - повторно отображая их с $HEX64., который всегда будет показывать заглавные буквы для шестнадцатеричных символов.

Что, скорее всего, необходимо сохранить в нижнем регистре формата $HEX64.. Вы можете сделать это с put:

data want; 
    set have; 
    source = catt(first,last,dob,sex); 
    encryp = sha256(source); 
    lower = lowcase(put(encryp,$HEX64.)); 
run; 

Обратите внимание, что encryp выглядит как - то совершенно другое, и, вероятно, не особенно полезно. Конечно, вы можете пропустить этот шаг, если хотите.

+0

@ Foxer, спасибо за объяснение. +1 – SMW

Смежные вопросы