2017-01-11 33 views
0

現在、別のアプリケーションで使用する変数を準備するために、SHA256関数をテストしています。SAS小文字SHA256文字列

ユーザは、SHA256の結果を小文字で要求しました。私はそれが一度SHA機能を通過した小文字の文字列を許可しませんようです

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

のstring-

を変換できることを確認するために、迅速なレコードを作成しました。

回避策はありますか?以下の試みは望ましい結果をもたらさなかった。

以下
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

これは正解ですが、このような答えは、説明していないのであまり役に立ちません_これは正しい方法です。 – Joe

+0

@ Foxer、すばやく回顧してくれてありがとう。 +1 – SMW

2

問題がsha256機能付きではありませんが、$HEX64形式で。

lowcaseを使用した場合、実際にはSHA256の結果に害を及ぼします.16進表現は変更されていませんが、実際に文字自体を変更しているため、結果が正確ではありません。 $HEX64.でそれらを表示すると、16進文字の大文字が常に表示されます。

代わりに、$HEX64.形式の小文字バージョンを保存することをお勧めします。あなたは行うことができputと:encrypがどのように見えるか

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

注 - 全く異なる、おそらく特に有用ではない何か。もちろん、そのステップをスキップすることもできます。

+0

@フォルカー、説明のためにありがとう。 +1 – SMW

関連する問題