2016-08-31 2 views
1

Я использую IV в cipher.NewOFB, но мой зашифрованный файл никогда не префикс с ним. Я следовал примерам golang в https://golang.org/pkg/crypto/cipher/, но не могу понять, почему префикс не рассматривается.Golang crypto: зашифрованный файл с префиксом IV

Кто-нибудь видит, в чем проблема?

func generateRandomIV(length int) []byte { 
    iv := make([]byte, aes.BlockSize) 

    if _, err := io.ReadFull(rand.Reader, iv); err != nil { 
     panic(err) 
    } 

    return iv 
} 


func encryptFile(filename, keystring string) error { 
    readFile, err := os.Open(filename) 
    iv := generateRandomIV(aes.BlockSize) 

    outFile, err := os.OpenFile(filename+".enc", os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0600) 
    if err != nil { 
     panic(err) 
    } 

    defer readFile.Close() 
    defer outFile.Close() 

    key := []byte(keystring) 

    block, err := aes.NewCipher(key) 

    if err != nil { 
     panic(err) 
    } 

    fmt.Println("IV:", iv) 
    writer := &cipher.StreamWriter{S: cipher.NewOFB(block, iv), W: outFile} 

    if _, err := io.Copy(writer, readFile); err != nil { 
     return err 
    } 

    return nil 
} 

ответ

2

Добавить префикс IV самостоятельно или предварительно предоставить доступ к IV. Если вы его префикс, вы удалите его и примените его при расшифровке.

Как общий доступ к IV не является частью стандарта шифрования, это выбор разработчика. Префикс IV является общим, но не обязательным или единственным способом, но, тем не менее, является хорошим выбором.

+2

Вы говорите, что я должен сам добавить байты в файл? Почему NewOFB принимает значение IV в качестве параметра, если он ничего не делает с ним? –

+2

Да, это обычно то, что делается, когда вы используете шифрование на этом низком уровне. – zaph

+0

Замечание: keystring - это читаемая пользователем строка, которую он не должен использовать непосредственно в качестве ключа, вместо этого ключ шифрования должен быть получен из него с помощью функции деривации, такой как PBKDF2. Это потребует еще большего количества данных в комплекте с зашифрованными данными: количество соли и итераций. – zaph