代码之家  ›  专栏  ›  技术社区  ›  Chris

加密:如何在多个字段中使用1 iv

  •  1
  • Chris  · 技术社区  · 16 年前

    正在加密。所以,如果我加密一个地址,并将其全部存储在一个字段中,我需要一个iv。但是如果我的地址分布在多个字段上,我需要几个ivs,每个字段一个。这是一个问题。

    //get input for fields 1-5
    
    //encrypt them, so that each one has its iv appended to it
    $field1_enc = encr($field1);
    $field2_enc = encr($field2);
    $field3_enc = encr($field3);
    $field4_enc = encr($field4);
    $field5_enc = encr($field5);
    
    //then store them individually in the database
    

    1 回复  |  直到 16 年前
        1
  •  4
  •   ZZ Coder    16 年前

    IV需要是独一无二的,但不必是不可预测的或秘密的。为什么不为每条记录创建一个随机数作为IV的基数呢。将1添加到基础并将其用作字段1的IV,将2添加到字段2。。。

    编辑:以下是一些实施细节,

    为iv_base创建一列,它只是一个随机数,

    加密或解密字段时,使用此函数创建IV,

    function get_iv($base, $size, $seq) {
        $remaining = $size;
        $round = 0;
        $iv = '';
        while ($remaining != 0) {
            $d = md5($base . $seq . $round, true);
            $len = min($remaining, 16);
            $iv .= substr($d, 0, $len);
            $remaining -= $len;
            $round++;
        }
        return $iv;
    }
    

    推荐文章