この項は「PDELをPHP以外の言語で実装したい、という考えをお持ちの人」以外は読み飛ばして頂いても構いません。
固定暗号化は、次の二つの機能の仕様が可変暗号化と異なります。
一つ目は「固定暗号化時のマップ文字置換」(概略イメージの手順C)です。二つ目は「固定暗号化時の文字列拡張」(レシピコマンドのExtendまたはAddで追加する文字列を生成する仕様です。)以下に、これらを記します。
【固定暗号化時のマップ文字列置換】
「16進数で使用される0~9およびa~fを別の文字に置き換える」場合、マップファイルの固定マップキー文字列をもとに、次の論理で置き換える文字を決定します。なお、この機能はPDEL本体(Pdel.php)の_hex2Map関数で実装されています。
- 基準文字列前半部の決定
「置き換える文字列の長さ÷16の商(端数切捨て)」が1以上であれば、商の回数分、「固定マップキー文字列」を繰り返します。繰り返した文字列を「追加文字列後半部」とします。商が0であれば、「基準文字列前半部」は空文字列とします。
- 基準文字列後半部の決定
「置き換える文字列の長さ÷16の余り」が1以上であれば、「固定マップキー文字列の末尾から余りの桁数分を反転させた文字列」を「基準文字列後半部」とします。余り0であれば、「基準文字列後半部」は空文字列とします。
- 基準文字列の決定
基準文字列前半部と基準文字列後半部を連結した文字列を「基準文字列」とします。
- 置き換え
基準文字列は、「置き換える文字列と同じ長さで、なおかつ、0、1、2、3のみので構成された文字列」です。置き換える文字列先頭桁から末尾まで、同じ桁位置の基準文字列(0、1、2、3のいずれか)に従って、マップ文字列4種類を決定します。(基本文字列の該当桁の値が0であれば四種類の先頭1桁、1であれば四種類の先頭から2桁目、2であれば四種類の先頭から3桁目、3であれば四種類の末尾の桁とします。)
【固定暗号化時の文字列拡張】
ExtendまたはAddコマンドがレシピファイルに定義されている場合、マップファイルの固定拡張文字列をもとに次の論理で追加する文字列を決定します。なお、以下はPDEL本体(Pdel.php)の_genFixedString関数で実装されています。
- 基準文字列の決定
「追加する文字列の長さ÷10の余り」の桁数分、マップファイルの固定拡張文字列を左方向に循環させます。その後、「追加する文字列の長さ÷10の余り」が2、0、3、8いずれかに該当すれば、循環後の文字列を反転させます。この論理で決定された文字列を「基準文字列」とします。
- 追加文字列後半部の決定
「追加する文字列の長さ÷64の商(端数切捨て)」が1以上であれば、商の回数分、「基準文字列」を繰り返します。繰り返した文字列を「追加文字列後半部」とします。商が0であれば、「追加文字列後半部」は空文字列とします。
- 追加文字列前半部の決定
「追加する文字列の長さ÷64の余り」が1以上であれば、「基準文字列の先頭」から「余りの桁数分」を「追加文字列前半部」とします。余りが0であれば、「追加文字列前半部」は空文字列とします。
- 追加文字列の確定
「追加する文字列の長さ÷64の余り」が1以上であれば、「基準文字列の先頭」から「余りの桁数分」を「追加文字列前半部」とします。余りが0であれば、「追加文字列前半部」は空文字列とします。