Şifreleme: Birden çok alanda rağmen 1 iv var nasıl

1 Cevap php

Ben bir süre için bu için en iyi çözüme ulaşmak için çalışıyoruz sıkışmış oldum. Ben bir başlatma vektörü her item şifreli olduğu için benzersiz olması gerektiğini biliyoruz. Ben bir adres şifreleyerek ve ben bunu tek bir alanda saklanan varsa Yani, ben bunun için tek bir iv gerekir. Birden alanlar üzerinde adres yayılmasını varsa Ama ben birkaç ivs, her alan için bir ihtiyaç. Bu bir sorundur.

Alanların bireysellik korurken encrypt multiple fields (all in the same row/record) with a single iv, için bir yolu var mı? Amaç, kayıt başına tek bir IV sahip olmaktır.

Ne yaptığını düşünüyordum böyle bir şey oldu

//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

Nasıl tek bir tuş ile tüm alanları şifrelemek mi? Ben bu alanlardan herhangi birini düzenlemek istediğinizde, o zaman ne olur? (Benim tahminim ben yeni bir iv ile yeniden şifrelemek sonra, un-ecrypt olurdu) olduğunu. Ama asıl soru kavram kenara, ben programlı bu halletmek için nasıl anlamıyorum, yani tek bir iv ile tüm alanları şifreleyerek

1 Cevap

IV benzersiz olması gerekir, ancak öngörülemeyen veya gizli zorunda değildir. Neden her kayıt için IV üs olarak rastgele bir sayı oluşturmak gerekmez. Baz 1 ekleyerek ve alan 1 için IV olarak kullanmak, alan 2 için 2 ekleyerek ...

EDIT: İşte bazı uygulama detayları vardır

Sadece rastgele sayı iv_base için bir sütun oluşturun

$ Iv_base = random ();

Eğer encryt veya alanları şifresini zaman, IV oluşturmak için bu işlevi kullanın,

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;
}

$ Baz Eğer veritabanında saklanan rasgele bir sayıdır. $ Boyut IV boyutudur. $ Seq her alan için atanan numaradır. Sen alan adını da kullanabilirsiniz.