Hi All -
The SHA256 function seems to work if I pass it a value directly - output from below is:
43E7361624A78AE87E9F8F36D1E2E88D92C861DFDE61672FA301952A1DE044D9
It is 100% correct SHA256 value.
data hashingtest;
length hash $ 64;
format hash $hex64.;
set HP_LEADS.lm_leads_details;
hash = SHA256('A00783126');
put hash;
run;
But if I try to SHA256 an entire column of data the values are wrong and in some cases are way short of expected value length - same account number from columnar results - with code below:
ED9440F53E640CD7588D92160103734E33770E5AA6158C9991B5E558686F5780
data hashingtest;
length hash $ 64;
format hash $hex64.;
set HP_LEADS.lm_leads_details;
hash = SHA256(accountnumber);
put hash;
run
I am not a SAS expert by any means but would appreciate any direction on this one.
I've checked my values at this website https://passwordsgenerator.net/sha256-hash-generator/
And doublecheck results using a Microsoft Access macro (no laughing :-|)
So I'm confident the second code set results are not SHA256.
Thanks in advance,
Patrick
I did some experiment:
data have;
a1 = 'A00783126';
run;
data _null_;
set have;
h1 = SHA256('A00783126');
h2 = SHA256(a1);
length h3 h4 $ 64;
h3 = SHA256('A00783126');
h4 = SHA256(a1);
h5 = HASHING('SHA256', 'A00783126');
h6 = HASHING('SHA256', a1);
put
h1= $hex64.
/
h2= $hex64.
/
h3= $hex64.
/
h4= $hex64.
/
h5=
/
h6=
;
run;
and the result was:
h1=43E7361624A78AE87E9F8F36D1E2E88D92C861DFDE61672FA301952A1DE044D9 h2=43E7361624A78AE87E9F8F36D1E2E88D92C861DFDE61672FA301952A1DE044D9 h3=43E7361624A78AE87E9F8F36D1E2E88D92C861DFDE61672FA301952A1DE044D9 h4=43E7361624A78AE87E9F8F36D1E2E88D92C861DFDE61672FA301952A1DE044D9 h5=43E7361624A78AE87E9F8F36D1E2E88D92C861DFDE61672FA301952A1DE044D9 h6=43E7361624A78AE87E9F8F36D1E2E88D92C861DFDE61672FA301952A1DE044D9 NOTE: There were 1 observations read from the data set WORK.HAVE. NOTE: DATA statement used (Total process time): real time 0.00 seconds cpu time 0.01 seconds
Looks fine to me.
Are the data you have proper? Maybe try to add strip() function to remove leading and trailing blanks.
Additional spaces at the end changes the result:
data _null_;
set have;
h1 = SHA256('A00783126');
h7 = SHA256('A00783126 ');
put
h1= $hex64.
/
h7= $hex64.
;
run;
log:
h1=43E7361624A78AE87E9F8F36D1E2E88D92C861DFDE61672FA301952A1DE044D9 h7=73BC4975C5E495EF2096E860423C80FC19E1C0805E889F8823CB8917F8FA5541 NOTE: There were 1 observations read from the data set WORK.HAVE. NOTE: DATA statement used (Total process time): real time 0.00 seconds cpu time 0.00 seconds
All the best
Bart
I did some experiment:
data have;
a1 = 'A00783126';
run;
data _null_;
set have;
h1 = SHA256('A00783126');
h2 = SHA256(a1);
length h3 h4 $ 64;
h3 = SHA256('A00783126');
h4 = SHA256(a1);
h5 = HASHING('SHA256', 'A00783126');
h6 = HASHING('SHA256', a1);
put
h1= $hex64.
/
h2= $hex64.
/
h3= $hex64.
/
h4= $hex64.
/
h5=
/
h6=
;
run;
and the result was:
h1=43E7361624A78AE87E9F8F36D1E2E88D92C861DFDE61672FA301952A1DE044D9 h2=43E7361624A78AE87E9F8F36D1E2E88D92C861DFDE61672FA301952A1DE044D9 h3=43E7361624A78AE87E9F8F36D1E2E88D92C861DFDE61672FA301952A1DE044D9 h4=43E7361624A78AE87E9F8F36D1E2E88D92C861DFDE61672FA301952A1DE044D9 h5=43E7361624A78AE87E9F8F36D1E2E88D92C861DFDE61672FA301952A1DE044D9 h6=43E7361624A78AE87E9F8F36D1E2E88D92C861DFDE61672FA301952A1DE044D9 NOTE: There were 1 observations read from the data set WORK.HAVE. NOTE: DATA statement used (Total process time): real time 0.00 seconds cpu time 0.01 seconds
Looks fine to me.
Are the data you have proper? Maybe try to add strip() function to remove leading and trailing blanks.
Additional spaces at the end changes the result:
data _null_;
set have;
h1 = SHA256('A00783126');
h7 = SHA256('A00783126 ');
put
h1= $hex64.
/
h7= $hex64.
;
run;
log:
h1=43E7361624A78AE87E9F8F36D1E2E88D92C861DFDE61672FA301952A1DE044D9 h7=73BC4975C5E495EF2096E860423C80FC19E1C0805E889F8823CB8917F8FA5541 NOTE: There were 1 observations read from the data set WORK.HAVE. NOTE: DATA statement used (Total process time): real time 0.00 seconds cpu time 0.00 seconds
All the best
Bart
Thanks a tonne - heavily borrowing from you - this works like a charm:
data lm_leads_hash;
set HP_LEADS.lm_leads_details;
length h1 $ 64;
h1 = SHA256(strip(accountnumber));
put
h1= $hex64.
;
run;
The results in the log file are perfect - that output table is a mess - but the values have been hashed.
Thanks and have a great weekend!
Patrick
Registration is now open for SAS Innovate 2025 , our biggest and most exciting global event of the year! Join us in Orlando, FL, May 6-9.
Sign up by Dec. 31 to get the 2024 rate of just $495.
Register now!
SAS' Charu Shankar shares her PROC SQL expertise by showing you how to master the WHERE clause using real winter weather data.
Find more tutorials on the SAS Users YouTube channel.