Encryption 通过REXX进行加密/解密

Encryption 通过REXX进行加密/解密,encryption,zos,rexx,Encryption,Zos,Rexx,我研究了z/OS和REXX,现在有了代码,它从MY.DATA.SET public、private中获取公钥和私钥,并加密消息MSG: "ALLOC FI(pubkey) DA('MY.DATA.SET(PUBLIC)') SHR REUSE" "ALLOC FI(prikey) DA('MY.DATA.SET(PRIVATE)') SHR REUSE" "ALLOC FI(msgin) DA(‘MY.DATA.SET(MSG)') SHR REUSE" "ALLOC FI(ms

我研究了z/OS和REXX,现在有了代码,它从MY.DATA.SET public、private中获取公钥和私钥,并加密消息MSG:

"ALLOC FI(pubkey) DA('MY.DATA.SET(PUBLIC)') SHR REUSE"   
"ALLOC FI(prikey) DA('MY.DATA.SET(PRIVATE)') SHR REUSE"  
"ALLOC FI(msgin)  DA(‘MY.DATA.SET(MSG)') SHR REUSE"  
"ALLOC FI(msgout) DA(*) SHR REUSE"                                      
"EXECIO 1 DISKR pubkey (STEM pub. FINIS"                                
"EXECIO 1 DISKR prikey (STEM pri. FINIS"                                
"EXECIO * DISKR msgin  (STEM msg. FINIS"                                
"EXECIO 0 DISKW msgout (STEM enc_msg. OPEN"                             
enc_msg.1 = pub.1                                                       
"EXECIO 1 DISKW msgout (STEM enc_msg. "                                 
do i=1 to msg.0                                                     
   do j=1 to length(msg.i)                                          
    letter.j = substr(msg.i,j,1)                                    
    encrypt.j = translate(letter.j,pri.1,pub.1)                     
   end                                                              
call write_encrypted_line                                           
end                                                                 
"EXECIO 0 DISKW msgout (FINIS"                                      
"FREE FI(pubkey)"                                                   
"FREE FI(prikey)"                                                   
"FREE FI(msgin)"                                                    
"FREE FI(msgout)"                                                   
exit 0                                                              
write_encrypted_line:                                               
charout = ''                                                        
newchar = ''                                                        
  do j=1 to length(msg.i)                                           
   newchar = encrypt.j                                              
   charout = charout||newchar                                       
  end                                                               
enc_msg.1 = charout                                                 
"EXECIO 1 DISKW msgout (STEM enc_msg. "                             
return                                                              
我想把它转换成反加密代码,它可以解密上面的加密结果。结果以MSGEN的名字存储到普通文本中,当然,使用相同的密钥对。 请,帮助:我应该在EncpySpring代码中更改什么以使其解密?线路

"ALLOC FI(msgin)  DA(‘MY.DATA.SET(MSGEN)') SHR REUSE"
已更改为MSG->MSGEN


感谢所有的帮助和回应

在不知道您的键是什么的情况下,我认为您需要在翻译行中反转键


这是IBM Master the Mainframe 2016提供的。这是比赛的训练系统。2016年的比赛已经结束了

关于输出第1行的内容可以注释掉。 在do I=2到msg.0中,I变量变得更高,与我的2类似 跳过输出的第一行

公钥已在MSG输入中,因此只需- pub.1=msg.1

删除或注释掉公钥的ALLOC、FREE和EXECIO


如果你不这样做,它会起作用,但这不是一项完整的任务。

这似乎是一个家庭作业问题,是吗?到目前为止,你做了些什么使它起作用?不是家庭作业,而是任务作业。我读过关于AES Clear Key-Generate、Write to CKDS、Encrypt and Decrypt、AES Secure Key-Generate、Write to CKDS、Encrypt and Decrypt和很多关于REXX的内容,但是没有任何地方能找到这样的例子。我想,首先我必须删除字符串enc_msg.1=pub.1,我写了吗?然后将所有的en改为de,比如:write_decrypted_line,dec_msg,等等,然后我认为有必要更改块DO-END。我尝试了不同的方法,比如encrypt.j=substrmsg.I,j,1decrypt.j=translateencrypt.j,pri.1,pub.1,但输出仍然是加密的。如果你能解释,我哪里错了,我会很高兴的!我真是个傻瓜!有必要在翻译中替换pub.1和pri.1,就是这样吗?但是第一行仍然是加密的。请问我该如何解决这个问题?请把你的两个答案合并成一个
/* REXX */                                                            
 /******************************************************************/  
 /**                                                              **/  
 /** Get access to private key, public key, and message           **/  
 /**                                                              **/  
 /******************************************************************/  
 "ALLOC FI(prikey) DA('ZOS.PUBLIC.SECRET.MESSAGES(PRIVATE)') SHR REUSE"
 "ALLOC FI(msgin)  DA('ZOS.PUBLIC.SECRET.MESSAGES(SECRET)') SHR REUSE" 
 /* "ALLOC FI(msgout) DA(*) SHR REUSE" */                              
 /******************************************************************/  
 /**                                                              **/  
 /** In the DECRYPT REXX routine, upon successful decryption      **/  
 /** of ZOS.PUBLIC.SECRET.MESSAGES(SECRET), uncomment msgout      **/  
 /** ALLOC below and comment the msgout ALLOC above               **/  
 /**                                                              **/  
 /******************************************************************/  
 "ALLOC FI(msgout) DA(P3.OUTPUT(#14)) SHR REUSE"                       
 /******************************************************************/  
 /**                                                              **/  
 /** Read private key, public key, and message                    **/  
 /**                                                              **/  
 /******************************************************************/  
 "EXECIO 1 DISKR prikey (STEM pri. FINIS"                              
 "EXECIO * DISKR msgin  (STEM msg. FINIS"                              
 pub.1 = msg.1                                                         
 /* say msg.1 */                                                       
 /******************************************************************/  
 /**                                                              **/  
 /** Parse  encrypted message using (REVERSE) private and public  **/  
 /** key pair to create decrypted message                         **/  
 /**                                                              **/  
 /******************************************************************/  
 do i=2 to msg.0                                                       
    do j=1 to length(msg.i)                                            
     letter.j = substr(msg.i,j,1)                                      
     decrypt.j = translate(letter.j,pub.1,pri.1)                       
    end                                                                
 call write_decrypted_line                                             
/* REXX */                                                            
 /******************************************************************/  
 /**                                                              **/  
 /** Get access to private key, public key, and message           **/  
 /**                                                              **/  
 /******************************************************************/  
 "ALLOC FI(prikey) DA('ZOS.PUBLIC.SECRET.MESSAGES(PRIVATE)') SHR REUSE"
 "ALLOC FI(msgin)  DA('ZOS.PUBLIC.SECRET.MESSAGES(SECRET)') SHR REUSE" 
 /* "ALLOC FI(msgout) DA(*) SHR REUSE" */                              
 /******************************************************************/  
 /**                                                              **/  
 /** In the DECRYPT REXX routine, upon successful decryption      **/  
 /** of ZOS.PUBLIC.SECRET.MESSAGES(SECRET), uncomment msgout      **/  
 /** ALLOC below and comment the msgout ALLOC above               **/  
 /**                                                              **/  
 /******************************************************************/  
 "ALLOC FI(msgout) DA(P3.OUTPUT(#14)) SHR REUSE"                       
 /******************************************************************/  
 /**                                                              **/  
 /** Read private key, public key, and message                    **/  
 /**                                                              **/  
 /******************************************************************/  
 "EXECIO 1 DISKR prikey (STEM pri. FINIS"                              
 "EXECIO * DISKR msgin  (STEM msg. FINIS"                              
 pub.1 = msg.1                                                         
 /* say msg.1 */                                                       
 /******************************************************************/  
 /**                                                              **/  
 /** Parse  encrypted message using (REVERSE) private and public  **/  
 /** key pair to create decrypted message                         **/  
 /**                                                              **/  
 /******************************************************************/  
 do i=2 to msg.0                                                       
    do j=1 to length(msg.i)                                            
     letter.j = substr(msg.i,j,1)                                      
     decrypt.j = translate(letter.j,pub.1,pri.1)                       
    end                                                                
 call write_decrypted_line