Go lang 3DES частично расшифровал зашифрованную строку - PullRequest
0 голосов
/ 16 ноября 2018

При выполнении дешифрования с использованием 3des данный зашифрованный текст не полностью расшифрован, не уверен, где он произошел, помогите мне завершить ошибку дешифрования

Код avaialbe на Go Playground дляПересечение и запуск

package main

import (
    "crypto/des"
    "encoding/hex"
    "fmt"
)

func main() {

    // Mimimum Key Size of Length 24
    key := "mysecretPasswordkeySiz24"
    plainText := "https://8gwifi.org"
    ct := EncryptTripleDES([]byte(key),plainText)
    fmt.Printf("Original Text:  %s\n",plainText)
    fmt.Printf("3DES Encrypted Text:  %s\n", ct)
    DecryptTripleDES([]byte(key),ct)

}

func EncryptTripleDES(key []byte, plaintext string) string {
        c,err := des.NewTripleDESCipher(key)
    if err != nil {
        fmt.Errorf("NewTripleDESCipher(%d bytes) = %s", len(key), err)
        panic(err)
    }

    out := make([]byte, len(plaintext))
    c.Encrypt(out, []byte(plaintext))
    return hex.EncodeToString(out)

    }


func DecryptTripleDES(key []byte, ct string) {

        ciphertext, _ := hex.DecodeString(ct)
        c, err := des.NewTripleDESCipher([]byte(key))
        if err != nil {
            fmt.Errorf("NewTripleDESCipher(%d bytes) = %s", len(key), err)
            panic(err)
        }
        plain := make([]byte, len(ciphertext))
        c.Decrypt(plain, ciphertext)
        s := string(plain[:])
        fmt.Printf("3DES Decrypyed Text:  %s\n", s)
}

Выход

Original Text:  https://8gwifi.org
3DES Encrypted Text:  a6e5215154bf86d000000000000000000000
3DES Decrypyed Text:  https://

1 Ответ

0 голосов
/ 16 ноября 2018

данный зашифрованный текст не полностью расшифрован

Зашифрованный вами текст полностью расшифрован.Проблема не в (пока) расшифровке, а в вашем шифровании.Как документировано, des.NewTripleDESCipher возвращает cipher.Block и cipher.Block.Encrypt шифрует, как документировано, только первый блок входных данных.Учитывая, что DES имеет размер блока 8 байт, только первые 8 байт входных данных зашифрованы, то есть https://.

Это означает, что для шифрования всех данных необходимо зашифровать все блоки.Аналогично, вам необходимо расшифровать все блоки при расшифровке, но cipher.Block.Decrypt также расшифровывает только один блок.

Помимо этого, сломан DES, поэтому не используйте его для чего-то серьезного.

...