0

我正在调试一个旧的 Cobol 程序,用于不同字符串的加密目的。(1.) 有人可以向我解释一下 SPACE X 'CB' 代表什么吗?

    ENVIRONMENT DIVISION.                                        
     SPECIAL-NAMES.                                               
     CLASS LATIN IS                                          
                "ABCDEFGHIJKLMNOPQRSTUVWXYZ"             
                "abcdefghijklmnopqrstuvwxyz" SPACE X'CB'.

稍后,此代码将用于应用字符串中每个字母的重定位,即字母表右侧的 4 个位置。一些符号不断出现在加密字符串中,我认为这与 EBCDIC 字符有关,但是 (2.) 我无法理解字符串字母和输出符号之间的确切联系..

 IF STRING IS LATIN
  IF (FUNCTION ORD(first letter of string) + 4) <= FUNCTION ORD("Z") 
   MOVE FUNCTION CHAR(FUNCTION ORD(first letter of string) + 4)    
     TO NEWSTRING(I:1)    

如果将字符串“JOHNSMITH”作为输入,那么输出将是:

 OUTPUT --> NÀ±RWQàXÀ  

             
4

3 回答 3

2

. 加密字符串中不断出现一些奇怪的符号,我认为这与类的定义有关?

,它可能与EBCDIC有关。EBCDIC 中的字母不像 ASCII 那样连续,字母排列为

a->i
   gap
j->r
   gap
s->z

EBCDIC是一个编码家族(有美国 EBCDIC、英国 EBCDIC、德国 EBCDIC 等)。中的gap内容取决于您使用的EBCDIC 变体。任何翻译(例如 EBCDIC --> ASCII)都会进一步混淆情况。

请参阅EBCDIC或对于 IBM037,请参阅https://www.compart.com/en/unicode/charsets/IBM037

因此加 4O会将其放入 Gap 中,与H.

IF STRING IS LATIN

可能正在测试字符是 Alphabetic、空格还是 X'CB'

于 2021-05-19T12:38:44.933 回答
1

如果你加密一个字符串,你不应该期望结果只包含可显示或可打印的字符,除非加密算法明确说明这一点。

加密的目的是隐藏内容。解密应该带回原始字符串。加密的字符串可以在任何字节中包含从 0 到 255 的任何值。它是一种加密算法,它定义了未加密的、可显示的字符和加密的对应字符之间的关系。

于 2021-05-19T18:33:03.200 回答
0

x'CB' 只是在类中定义条目的另一种方式。十六进制而不是字符。如果您使用的是拉丁代码页,您可以执行以下操作。拉丁语类是 X'414243CB'。

与拉丁语相同的是'ABCE'。E 是(带有 Dieresis 的拉丁文大写字母 E)

于 2021-05-25T02:51:44.210 回答