大型机中的 SHA256。 REXX 中是不是存在函数?

Posted

技术标签:

【中文标题】大型机中的 SHA256。 REXX 中是不是存在函数?【英文标题】:SHA256 in mainframe. Is function exist in REXX?大型机中的 SHA256。 REXX 中是否存在函数? 【发布时间】:2017-07-31 14:24:51 【问题描述】:

我调查了加密字符串 unsing rexx(大型机 ZOS)的问题。 我发现了一些有用的链接: http://rexxeec.sourceforge.net/doc/RexxEEC.pdf

但是当我尝试在 TSO 中使用它时,我得到了一个错误:

 **16 +++ hash = eecsha( str )**
 
 My source:
 
 /* Rexx */                                             
str = '*#*@'                                           
hash = eecsha( str )                                   
Say 'SHA value (in hex) of string' str 'is:' hash      

那么,也许我忘了添加任何库?或者这完全不可能,我必须自己写 SHA256?

顺便说一句,我从 DB2 加密了一行,看起来不可能像这样使用约束: 从表中选择 HASH(column, 2); 使用 ZOS DB2

【问题讨论】:

【参考方案1】:

如果我回到 sourceforge 页面本身,它会声明:

Rexx/EEC 是一个外部函数包,为 加密

所以回答你的问题,是的,除非你添加了那个库,否则你实际上错过了它。

【讨论】:

【参考方案2】:

因此,也许您想查看 SYS1.SAMPLIB(CSFTEST) 中的示例如何从 REXX 中调用加密函数。而散列生成的函数是 CSNBOWH(单向散列生成)。

如果您的大型机有加密,那么这个示例应该可以工作:

/* Rexx */                                                              00010000
                                                                        00020000
/* initialize parameter list */                                         00030000
RetCode        = 'FFFFFFFF'x ;                                          00040000
Reason         = 'FFFFFFFF'x ;                                          00050000
ExitLength     = '00000000'x;                                           00060000
ExitData       = '' ;                                                   00070000
RuleArrayCount = '00000001'x ;                                          00080000
RuleArray      = 'SHA-256 '  ;                                          00090000
TextLength     = '00000040'x ;                                          00100001
Text           = 'Applicationtext'!!copies('00'x,49);                   00110001
               /* 123456789+123456 */                                   00120000
ChainVectorLen = '00000080'x;                                           00130001
ChainVector    = copies('00'x,128);                                     00140001
HashLength     = '00000020'x ; /* 32 bytes */                           00150000
Hash           = copies('00'x,32);                                      00160000
                                                                        00170000
/**********************************/                                    00180000
/* Call One-Way Hash Generate     */                                    00190000
/**********************************/                                    00200000
say 'Executing one-way hash generation ...'                             00210000
say                                                                     00220000
address linkpgm 'CSNBOWH'        ,                                      00230000
                'RetCode'        ,                                      00240000
                'Reason'         ,                                      00250000
                'ExitLength'     ,                                      00260000
                'ExitData'       ,                                      00270000
                'RuleArrayCount' ,                                      00280000
                'RuleArray'      ,                                      00290000
                'TextLength'     ,                                      00300000
                'Text'           ,                                      00310000
                'ChainVectorLen' ,                                      00320000
                'ChainVector'    ,                                      00330000
                'HashLength'     ,                                      00340000
                'Hash';                                                 00350000
                                                                        00360000
select;                                                                 00370000
                                                                        00380000
  /* return code 12 */                                                  00390000
  when RetCode = '0000000C'x then                                       00400000
    do;                                                                 00410000
    if Reason = '00000000'x then                                        00420000
      do;                                                               00430000
      say 'ICSF is not started or the DES/symmetric-key master key '    00440000
      say 'is not set';                                                 00450000
      say                                                               00460000
      exit;                                                             00470000
      end;                                                              00480000
    if Reason = '00000008'x then                                        00490000
      do;                                                               00500000
      say 'ICSF is started, the required cryptographic hardware is '    00510000
      say 'not available'                                               00520000
      say                                                               00530000
      exit;                                                             00540000
      end;                                                              00550000
    end;                                                                00560000
                                                                        00570000
  /* return code 0 */                                                   00580000
  when RetCode = '00000000'x then                                       00590000
    do                                                                  00600000
    say 'successful completion ...';                                    00610000
    say 'Generated SHA 256 hash:' ;                                     00620001
    say c2x(Hash);                                                      00630001
    say ;                                                               00640000
    end;                                                                00650000
                                                                        00660000
  /* other return codes */                                              00670000
  otherwise                                                             00680000
    do                                                                  00690000
    say 'CSNBOWH failed: rc =' c2x(RetCode) 'rs =' c2x(Reason) ;        00700000
    say                                                                 00710000
    exit;                                                               00720000
    end;                                                                00730000
                                                                        00740000
end; /* select */                                                       00750000
                                                                        00760000
exit                                                                    00770000

描述可以在https://www.ibm.com/support/knowledgecenter/en/SSLTBW_2.2.0/com.ibm.zos.v2r2.csfb400/owh.htm找到

【讨论】:

以上是关于大型机中的 SHA256。 REXX 中是不是存在函数?的主要内容,如果未能解决你的问题,请参考以下文章

REXX/SORT 拆分顺序文件

用非十六进制字母字符替换 sha-256 哈希中的数字在密码学上是不是安全?

SHA-256 或 MD5 用于文件完整性

VUE+webpack+npm项目中的sha256加密

c语言中的SHA256实现

比特币背后的算法与数学