首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SAS小写SHA256字符串

SAS小写SHA256字符串
EN

Stack Overflow用户
提问于 2017-01-11 18:28:45
回答 3查看 1.7K关注 0票数 0

目前正在测试一个SHA256函数,以便为在另一个应用程序中使用准备一个变量。

用户要求SHA256结果在较低的情况下。我创建了一个快速记录,以确保我可以转换字符串-

代码语言:javascript
复制
data have;
input first $ last $ dob $ 10. sex $;
cards;
test person 1955-07-31 1
;
run;

似乎一旦通过SHA函数,它将不允许小写字符串。

有办法解决这个问题吗?以下的尝试没有产生理想的结果。

代码语言:javascript
复制
data have2;
set have;
source = catt(first,last,dob,sex);
encryp = lowcase(sha256(source));
format encryp $hex64.;
run;
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-01-11 18:42:02

下面将使用包含以下格式的put语句来完成这一任务:

代码语言:javascript
复制
data have2;
set have;
encryp = lowcase(put(sha256(catt(first,last,dob,sex)),$hex64.));
run;

它将显示与您的方法完全不同的加密代码,但仍然是一致的。

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 2017-01-11 18:58:32

问题不在于sha256函数,而在于$HEX64格式。

当您使用lowcase时,您实际上对SHA256结果造成了一些损害:您没有更改十六进制表示形式,而是实际上正在更改字符本身,这意味着您的结果不准确-然后用$HEX64.显示它们,它将始终显示十六进制字符的大写字母。

相反,您想要的大概是存储$HEX64.格式的小写版本。你可以用put来做

代码语言:javascript
复制
data want;
  set have;
  source = catt(first,last,dob,sex);
  encryp = sha256(source);
  lower  = lowcase(put(encryp,$HEX64.));
run;

注意encryp是什么样子的--完全不同,而且可能没有什么特别的用处。如果你愿意,当然可以跳过这一步。

票数 2
EN

Stack Overflow用户

发布于 2019-12-31 15:34:06

代码语言:javascript
复制
*convert case;

%let txt="SEQ_CLAIM_ID, SEQ_MEMB_ID, EFFECTIVE_DATE";

%macro lower_case(txt);
    data;
        text=lowcase(&txt);
    run;
%mend;

%lower_case(&txt);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41598123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档