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;
runI 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
April 27 – 30 | Gaylord Texan | Grapevine, Texas
Walk in ready to learn. Walk out ready to deliver. This is the data and AI conference you can't afford to miss.
Register now and lock in 2025 pricing—just $495!
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.