encryption/decryption 来自 REXX
encryption/decryption by REXX
我研究了 z/OS 和 REXX,现在有了代码,它从 MY.DATA.SET (PUBLIC, PRIVATE) 中获取 public 和私钥并加密消息 (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 存储)解密为普通文本,当然,使用相同的密钥对。
请帮助:我应该在我的 encpypring 代码中更改什么以使其解密?行
"ALLOC FI(msgin) DA(‘MY.DATA.SET(MSGEN)') SHR REUSE"
已经更改 (MSG->MSGEN)
感谢所有帮助和回复!
在不知道您的密钥是什么的情况下,我认为您需要反转 TRANSLATE 行中的密钥。
http://www.ibm.com/support/knowledgecenter/SSLTBW_2.1.0/com.ibm.zos.v2r1.ikja300/transl.htm
Here are some examples:
TRANSLATE('abcdef') -> 'ABCDEF'
TRANSLATE('abbc','&','b') -> 'a&&c'
TRANSLATE('abcdef','12','ec') -> 'ab2d1f'
TRANSLATE('abcdef','12','abcd','.') -> '12..ef'
TRANSLATE('APQRV',,'PR') -> 'A Q V'
TRANSLATE('APQRV',XRANGE('00'X,'Q')) -> 'APQ '
TRANSLATE('4123','abcd','1234') -> 'dabc'
do i=1 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_dencrypted_line
end
来自IBM Master the Mainframe 2016,是大赛的训练系统。 2016年的比赛已经结束了。
关于输出第一行的内容可以注释掉。
I 变量在 do i=2 到 msg.0 中变得更高,就像我的“2”
跳过第一行输出。
Public 密钥已经在 MSG 输入中,所以只需要 -
pub.1 = msg.1
删除或注释掉 Public 键的 ALLOC、FREE 和 EXECIO。
如果你不这样做,它会起作用,但这不是一个完整的任务。
/* 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
我研究了 z/OS 和 REXX,现在有了代码,它从 MY.DATA.SET (PUBLIC, PRIVATE) 中获取 public 和私钥并加密消息 (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 存储)解密为普通文本,当然,使用相同的密钥对。 请帮助:我应该在我的 encpypring 代码中更改什么以使其解密?行
"ALLOC FI(msgin) DA(‘MY.DATA.SET(MSGEN)') SHR REUSE"
已经更改 (MSG->MSGEN)
感谢所有帮助和回复!
在不知道您的密钥是什么的情况下,我认为您需要反转 TRANSLATE 行中的密钥。
http://www.ibm.com/support/knowledgecenter/SSLTBW_2.1.0/com.ibm.zos.v2r1.ikja300/transl.htm
Here are some examples:
TRANSLATE('abcdef') -> 'ABCDEF'
TRANSLATE('abbc','&','b') -> 'a&&c'
TRANSLATE('abcdef','12','ec') -> 'ab2d1f'
TRANSLATE('abcdef','12','abcd','.') -> '12..ef'
TRANSLATE('APQRV',,'PR') -> 'A Q V'
TRANSLATE('APQRV',XRANGE('00'X,'Q')) -> 'APQ '
TRANSLATE('4123','abcd','1234') -> 'dabc'
do i=1 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_dencrypted_line
end
来自IBM Master the Mainframe 2016,是大赛的训练系统。 2016年的比赛已经结束了。
关于输出第一行的内容可以注释掉。 I 变量在 do i=2 到 msg.0 中变得更高,就像我的“2” 跳过第一行输出。
Public 密钥已经在 MSG 输入中,所以只需要 - pub.1 = msg.1
删除或注释掉 Public 键的 ALLOC、FREE 和 EXECIO。
如果你不这样做,它会起作用,但这不是一个完整的任务。
/* 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