疑似コードとは? わかりやすく解説

擬似コード

(疑似コード から転送)

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2024/02/25 05:10 UTC 版)

擬似コード (ぎじコード、: pseudocode)とは、アルゴリズムなどを、架空の非常に高水準プログラミング言語擬似言語)で記述したものである。PascalFortranC言語などの既存のプログラミング言語の構文と、自然言語に近い表現を組み合わせて記述することが多い。




「擬似コード」の続きの解説一覧

疑似コード

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/06/29 03:46 UTC 版)

SHA-1」の記事における「疑似コード」の解説

SHA-1の疑似コードは以下の通りである。 Note 1: All variables are unsigned 32 bits and wrap modulo 232 when calculating, except ml the message length which is 64 bits, and hh the message digest which is 160 bits.Note 2: All constants in this pseudo code are in big endian. Within each word, the most significant byte is stored in the leftmost byte positionInitialize variables:h0 = 0x67452301h1 = 0xEFCDAB89h2 = 0x98BADCFEh3 = 0x10325476h4 = 0xC3D2E1F0ml = message length in bits (always a multiple of the number of bits in a character).Pre-processing:append the bit '1' to the message i.e. by adding 0x80 if characters are 8 bits.append 0 ≤ k < 512 bits '0', so that the resulting message length (in bits) is congruent to 448 (mod 512)append ml, as a 64-bit big-endian integer. So now the message length is a multiple of 512 bits.Process the message in successive 512-bit chunks:break message into 512-bit chunksfor each chunk break chunk into sixteen 32-bit big-endian words w[i], 0 ≤ i ≤ 15 Extend the sixteen 32-bit words into eighty 32-bit words: for i from 16 to 79 w[i] = (w[i-3] xor w[i-8] xor w[i-14] xor w[i-16]) leftrotate 1 Initialize hash value for this chunk: a = h0 b = h1 c = h2 d = h3 e = h4 Main loop: for i from 0 to 79 if 0 ≤ i ≤ 19 then f = (b and c) or ((not b) and d) k = 0x5A827999 else if 20 ≤ i ≤ 39 f = b xor c xor d k = 0x6ED9EBA1 else if 40 ≤ i ≤ 59 f = (b and c) or (b and d) or (c and d) k = 0x8F1BBCDC else if 60 ≤ i ≤ 79 f = b xor c xor d k = 0xCA62C1D6 temp = (a leftrotate 5) + f + e + k + w[i] e = d d = c c = b leftrotate 30 b = a a = temp Add this chunk's hash to result so far: h0 = h0 + a h1 = h1 + b h2 = h2 + c h3 = h3 + d h4 = h4 + eProduce the final hash value (big-endian) as a 160 bit number:hh = (h0 leftshift 128) or (h1 leftshift 96) or (h2 leftshift 64) or (h3 leftshift 32) or h4 hhメッセージダイジェストであり、十六進法 (base 16) あるいはBase64エンコード表現される定数は "nothing up my sleeve number" として選択される4つラウンド定数 k はそれぞれ 2、3、5、10の平方根230 倍の値である。状態値のうち h0 から h3 まではMD5と同じであり、h4 は類似したものである。 FIPS PUB 180-1によるもの代わりに下記の式をメインループでの f の計算用いることができる。 (0 ≤ i ≤ 19): f = d xor (b and (c xor d)) (alternative 1)(0 ≤ i ≤ 19): f = (b and c) xor ((not b) and d) (alternative 2)(0 ≤ i ≤ 19): f = (b and c) + ((not b) and d) (alternative 3)(0 ≤ i ≤ 19): f = vec_sel(d, c, b) (alternative 4) (40 ≤ i ≤ 59): f = (b and c) or (d and (b or c)) (alternative 1)(40 ≤ i ≤ 59): f = (b and c) or (d and (b xor c)) (alternative 2)(40 ≤ i ≤ 59): f = (b and c) + (d and (b xor c)) (alternative 3)(40 ≤ i ≤ 59): f = (b and c) xor (b and d) xor (c and d) (alternative 4) Max Locktyukhin は、32-79ラウンドにおける w[i] = (w[i-3] xor w[i-8] xor w[i-14] xor w[i-16]) leftrotate 1 を w[i] = (w[i-6] xor w[i-16] xor w[i-28] xor w[i-32]) leftrotate 2 で置換することが可能であることを示した

※この「疑似コード」の解説は、「SHA-1」の解説の一部です。
「疑似コード」を含む「SHA-1」の記事については、「SHA-1」の概要を参照ください。


疑似コード

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/08/14 07:21 UTC 版)

SHA-2」の記事における「疑似コード」の解説

SHA-256アルゴリズムの疑似コードは以下の通りである。 Note 1: All variables are 32 bit unsigned integers and addition is calculated modulo 232Note 2: For each round, there is one round constant k[i] and one entry in the message schedule array w[i], 0 ≤ i ≤ 63Note 3: The compression function uses 8 working variables, a through hNote 4: Big-endian convention is used when expressing the constants in this pseudocode, and when parsing message block data from bytes to words, for example, the first word of the input message "abc" after padding is 0x61626380Initialize hash values:(first 32 bits of the fractional parts of the square roots of the first 8 primes 2..19):h0 := 0x6a09e667h1 := 0xbb67ae85h2 := 0x3c6ef372h3 := 0xa54ff53ah4 := 0x510e527fh5 := 0x9b05688ch6 := 0x1f83d9abh7 := 0x5be0cd19Initialize array of round constants:(first 32 bits of the fractional parts of the cube roots of the first 64 primes 2..311):k[0..63] := 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2Pre-processing:append the bit '1' to the messageappend k bits '0', where k is the minimum number >= 0 such that the resulting message length (modulo 512 in bits) is 448.append length of message (without the '1' bit or padding), in bits, as 64-bit big-endian integer (this will make the entire post-processed length a multiple of 512 bits)Process the message in successive 512-bit chunks:break message into 512-bit chunksfor each chunk create a 64-entry message schedule array w[0..63] of 32-bit words (The initial values in w[0..63] don't matter, so many implementations zero them here) copy chunk into first 16 words w[0..15] of the message schedule array Extend the first 16 words into the remaining 48 words w[16..63] of the message schedule array: for i from 16 to 63 s0 := (w[i-15] rightrotate 7) xor (w[i-15] rightrotate 18) xor (w[i-15] rightshift 3) s1 := (w[i-2] rightrotate 17) xor (w[i-2] rightrotate 19) xor (w[i-2] rightshift 10) w[i] := w[i-16] + s0 + w[i-7] + s1 Initialize working variables to current hash value: a := h0 b := h1 c := h2 d := h3 e := h4 f := h5 g := h6 h := h7 Compression function main loop: for i from 0 to 63 S1 := (e rightrotate 6) xor (e rightrotate 11) xor (e rightrotate 25) ch := (e and f) xor ((not e) and g) temp1 := h + S1 + ch + k[i] + w[i] S0 := (a rightrotate 2) xor (a rightrotate 13) xor (a rightrotate 22) maj := (a and b) xor (a and c) xor (b and c) temp2 := S0 + maj h := g g := f f := e e := d + temp1 d := c c := b b := a a := temp1 + temp2 Add the compressed chunk to the current hash value: h0 := h0 + a h1 := h1 + b h2 := h2 + c h3 := h3 + d h4 := h4 + e h5 := h5 + f h6 := h6 + g h7 := h7 + hProduce the final hash value (big-endian):digest := hash := h0 append h1 append h2 append h3 append h4 append h5 append h6 append h7 ch および maj計算は、SHA-1同様の手法により最適化できる。 SHA-224本質的にSHA-256と同じであるが、以下の点が異なる。 初期値 h0 から h7 が異なる h7 を除去することで出力得られる SHA-224 initial hash values (in big endian):(The second 32 bits of the fractional parts of the square roots of the 9th through 16th primes 23..53)h[0..7] := 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 SHA-512構造本質的にSHA-256と同じであるが、以下の点が異なる。 メッセージ512ビットごとではなく1024ビットごとのチャンク分けられる 初期値ラウンド定数64ビット拡張されている ラウンド数が64から80変更されている メッセージ配列wは64個の32ビットワードではなく80個の64ビットワードを持つ メッセージ配列wを拡張するためのループ1663ではなく1679 ラウンド定数最初80個の素数 2..409 に基づいている 演算用いられるワード長64ビットである 末尾追加されるメッセージ長が128ビットビッグエンディアンである シフトローテートの数が異なSHA-512 initial hash values (in big-endian):h[0..7] := 0x6a09e667f3bcc908, 0xbb67ae8584caa73b, 0x3c6ef372fe94f82b, 0xa54ff53a5f1d36f1, 0x510e527fade682d1, 0x9b05688c2b3e6c1f, 0x1f83d9abfb41bd6b, 0x5be0cd19137e2179SHA-512 round constants:k[0..79] := [ 0x428a2f98d728ae22, 0x7137449123ef65cd, 0xb5c0fbcfec4d3b2f, 0xe9b5dba58189dbbc, 0x3956c25bf348b538, 0x59f111f1b605d019, 0x923f82a4af194f9b, 0xab1c5ed5da6d8118, 0xd807aa98a3030242, 0x12835b0145706fbe, 0x243185be4ee4b28c, 0x550c7dc3d5ffb4e2, 0x72be5d74f27b896f, 0x80deb1fe3b1696b1, 0x9bdc06a725c71235, 0xc19bf174cf692694, 0xe49b69c19ef14ad2, 0xefbe4786384f25e3, 0x0fc19dc68b8cd5b5, 0x240ca1cc77ac9c65, 0x2de92c6f592b0275, 0x4a7484aa6ea6e483, 0x5cb0a9dcbd41fbd4, 0x76f988da831153b5, 0x983e5152ee66dfab, 0xa831c66d2db43210, 0xb00327c898fb213f, 0xbf597fc7beef0ee4, 0xc6e00bf33da88fc2, 0xd5a79147930aa725, 0x06ca6351e003826f, 0x142929670a0e6e70, 0x27b70a8546d22ffc, 0x2e1b21385c26c926, 0x4d2c6dfc5ac42aed, 0x53380d139d95b3df, 0x650a73548baf63de, 0x766a0abb3c77b2a8, 0x81c2c92e47edaee6, 0x92722c851482353b, 0xa2bfe8a14cf10364, 0xa81a664bbc423001, 0xc24b8b70d0f89791, 0xc76c51a30654be30, 0xd192e819d6ef5218, 0xd69906245565a910, 0xf40e35855771202a, 0x106aa07032bbd1b8, 0x19a4c116b8d2d0c8, 0x1e376c085141ab53, 0x2748774cdf8eeb99, 0x34b0bcb5e19b48a8, 0x391c0cb3c5c95a63, 0x4ed8aa4ae3418acb, 0x5b9cca4f7763e373, 0x682e6ff3d6b2b8a3, 0x748f82ee5defb2fc, 0x78a5636f43172f60, 0x84c87814a1f0ab72, 0x8cc702081a6439ec, 0x90befffa23631e28, 0xa4506cebde82bde9, 0xbef9a3f7b2c67915, 0xc67178f2e372532b, 0xca273eceea26619c, 0xd186b8c721c0c207, 0xeada7dd6cde0eb1e, 0xf57d4f7fee6ed178, 0x06f067aa72176fba, 0x0a637dc5a2c898a6, 0x113f9804bef90dae, 0x1b710b35131c471b, 0x28db77f523047d84, 0x32caab7b40c72493, 0x3c9ebe0a15c9bebc, 0x431d67c49c100d4c, 0x4cc5d4becb3e42b6, 0x597f299cfc657e2a, 0x5fcb6fab3ad6faec, 0x6c44198c4a475817]SHA-512 Sum & Sigma:S0 := (a rightrotate 28) xor (a rightrotate 34) xor (a rightrotate 39)S1 := (e rightrotate 14) xor (e rightrotate 18) xor (e rightrotate 41)s0 := (w[i-15] rightrotate 1) xor (w[i-15] rightrotate 8) xor (w[i-15] rightshift 7)s1 := (w[i-2] rightrotate 19) xor (w[i-2] rightrotate 61) xor (w[i-2] rightshift 6) SHA-384本質的にSHA-512と同じであるが、以下の点が異なる。 初期値 h0 から h7 が異なh6 および h7 を除去することで出力得られる SHA-384 initial hash values (in big-endian):h[0..7] := 0xcbbb9d5dc1059ed8, 0x629a292a367cd507, 0x9159015a3070dd17, 0x152fecd8f70e5939, 0x67332667ffc00b31, 0x8eb44a8768581511, 0xdb0c2e0d64f98fa7, 0x47b5481dbefa4fa4 SHA-512/tは本質的にSHA-512と同じであるが、以下の点が異なる。 初期値 h0 から h7 は SHA-512/t IV generation function によって与えられる h0 から h7 の t ビット目までで切り詰めることで出力得られる t が384となることは認められていないSHA-384を使うべきである) t が224および256であるものが認定されている

※この「疑似コード」の解説は、「SHA-2」の解説の一部です。
「疑似コード」を含む「SHA-2」の記事については、「SHA-2」の概要を参照ください。

ウィキペディア小見出し辞書の「疑似コード」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ


英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「疑似コード」の関連用語

疑似コードのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



疑似コードのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアの擬似コード (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、WikipediaのSHA-1 (改訂履歴)、SHA-2 (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。

©2024 GRAS Group, Inc.RSS