C$SecureHash

セキュア ハッシュ アルゴリズム (SHA-1) を使用して入力文字列から 20 バイトのメッセージ ダイジェストを生成します。
注: このルーチンを呼び出すときは、必ず DIALECT"RM" を使用してコンパイルしてください。

構文:

CALL "C$SecureHash" USING message-text [message-length]
                    GIVING message-digest

パラメーター:

message-text
PIC X(n)
message-length
PIC 9(n)
message-digest
PIC X(n)

入力パラメーター:

message-text

セキュア ハッシュ アルゴリズムへの入力文字列。セキュア ハッシュ アルゴリズムは長さが 2**64 ビット以下 (2**61 バイト以下) のメッセージをサポートしますが、この実装は長さが 2**32 ビット以下 (2**29 バイト以下) のメッセージに制限されています。

message-length

メッセージ ダイジェストの生成時に考慮される message-text のバイト数を指定します。したがって、この値は message-text で参照されるデータ項目の長さ以下でなければなりません。message-length を省略すると、message-length に LENGTH OF message-text が指定されている場合と同様に、message-text で参照されるデータ項目の値全体が使用されます。

出力パラメーター:

message-digest

長さがちょうど 20 バイトの文字データ項目を参照する識別子でなければなりません。セキュア ハッシュ アルゴリズムから結果として得られるメッセージ ダイジェストが、参照されるデータ項目に返されます。メッセージ ダイジェスト値の格納形式は、C$SecureHash が呼び出されるマシンのメモリ アーキテクチャに関係なく、最上位バイトが最下位アドレスに格納されてから最下位バイトが最上位アドレスに格納されるという形式になります。

C$SecureHash の処理を実行するためのメモリが不足している場合、message-digest の内容はすべてバイナリのゼロに設定されます。これは、メッセージ テキストのサイズより少し大きいメモリ領域を割り当てることができない場合にのみ発生します。C$SecureHash で使用されるセキュア ハッシュ アルゴリズムは、長さに制限があることを除いて、Federal Information Processing Standards (FIPS) Publication 180-1 でセキュア ハッシュ標準として定義されているもので、SHA-1 とも呼ばれます。

説明:

メッセージ ダイジェストの有用性を示す一例として、パスワードを安全な形式で保存できることが挙げられます。message-digest はパスワードの一方向ハッシュを使用して生成されるため、message-digest の値からパスワードを復元することは計算上不可能です(ただし、推測しやすいパスワードや辞書で見つけやすいパスワードの場合は、コンピューター プログラムを使用して、特定の message-digest の値にハッシュされるパスワードを検索することができます)。
注: 入力文字列が「abc」(長さ 3 バイト) の場合は、次のハッシュ値が生成されます。

x"A9993E364706816ABA3E25717850C26C9CD0D89D"

これはセキュア ハッシュ アルゴリズムのテスト結果としてよく知られているため (FIPS Pub 180-1 を参照)、「abc」はパスワード値として推奨されません。メッセージ ダイジェストは、メッセージが元の値から変更されていないことを確認するためにもよく使用されます。この場合は、元の message-textmessage-digest を計算し、その内容を安全な方法で送信して (別の安全なチャネルまたは message-digest の暗号化を使用する)、その内容が送信中に変更されないようにします。メッセージの受信者は、受信した message-text からメッセージ ダイジェストを計算し、結果として得られる message-digest が提供されたものと一致することを確認できます。一致する場合は、メッセージ テキストが送信中に変更された可能性はきわめて低いと言えます。