2015-12-03 35 views
0

我正在使用CI3加密庫。是否有可能每次都使用ctr模式創建相同的加密字符串,或者我必須使用安全性較低的ecb。這是我的設置:Codeigniter 3 - 加密創建與ctr模式相同的字符串

$this->encryption->initialize(
      [ 
       'cipher' => 'aes-256', 
       'mode' => 'ctr', 
       'key' => 'xxx' 
      ] 

     ); 

插入連續:

public function insertSerials($serials, $type) 
    { 
     $data = []; 

     $now = date('Y-m-d H:i:s'); 

     foreach ($serials as $serial): 
      $data[] = [ 
       'serial'  => $this->encryption->encrypt($serial), 
       'type'  => $type, 
       'date_added' => $now, 
      ]; 
     endforeach; 

     $this->db->insert_batch($this->_table_name, $data); 
    } 
+0

我需要在數據庫中插入唯一的代碼。如果代碼存在,則不應該插入該記錄並引發錯誤。 – Sasha

+0

我有一個密鑰列表,需要在加密的數據庫中插入。每個插入數據庫的密鑰都必須是唯一的。目前,我可以根據需要多次使用相同的文件,因此每次都會創建新記錄 - 同一個密鑰在db中多次。我試圖避免這一點。 – Sasha

+0

我添加了將數據插入到數據庫的代碼。 – Sasha

回答

1

除了歐洲央行的所有模式需要某種初始化向量。對於CTR而言,這被稱爲隨機數。 CTR模式對每次使用相同密鑰的加密都有獨特的IV是至關重要的,因爲否則通過一些聰明的扣除可以很容易地恢復許多明文。對於CTR使用靜態隨機數會比使用ECB造成更大的破壞性結果。

看來你真的想放棄語義安全,所以使用ECB模式沒有任何問題。具有靜態IV的CBC模式會更好,但這在CI3中不可行。

+0

我明白了。感謝您的解釋:) – Sasha

+0

@ArtjomB我可以把一個在一起,如果你想... –

+1

@Sasha順便說一句,我只回答你的直接問題,而不提這是否有意義。你沒有清楚地解釋爲什麼你想要在數據庫中擁有「獨特」的值,或者你想要對這些值做什麼。我建議你考慮一些替代方法,例如生成隨機令牌或使用哈希(或者甚至是哈希)。 –

相關問題