Saya menggunakan golang untuk melaksanakan penyulitan dan penyahsulitan fail, tetapi saya tidak tahu cara menggunakan nodej untuk melaksanakan penyahsulitan golang.
kod golang:
package main
import (
"bytes"
"crypto/aes"
"crypto/cipher"
"crypto/rand"
"io"
"io/ioutil"
"os"
)
func encrypt(aeskey string, filename string) {
plaintext, err := ioutil.ReadFile(filename)
if err != nil {
panic(err.Error())
}
// Byte array of the string
key := []byte(aeskey)
// Create the AES cipher
block, err := aes.NewCipher(key)
if err != nil {
panic(err)
}
// The IV needs to be unique, but not secure. Therefore it's common to
// include it at the beginning of the ciphertext.
ciphertext := make([]byte, aes.BlockSize+len(plaintext))
iv := ciphertext[:aes.BlockSize]
if _, err := io.ReadFull(rand.Reader, iv); err != nil {
panic(err)
}
stream := cipher.NewCFBEncrypter(block, iv)
stream.XORKeyStream(ciphertext[aes.BlockSize:], plaintext)
// create a new file for saving the encrypted data.
f, err := os.Create(filename + ".aes")
if err != nil {
panic(err.Error())
}
_, err = io.Copy(f, bytes.NewReader(ciphertext))
if err != nil {
panic(err.Error())
}
}
func main() {
key := "0123456789123456"
encrypt(key, "1.ts")
}
Bagaimanakah fail yang disulitkan oleh kod golang di atas boleh dihuraikan menggunakan nodejs?
Saya tidak tahu bahawa penukaran kepada nodej tertumpu terutamanya pada beberapa bait pemprosesan golang. Saya sendiri menulis ini, tetapi ia salah. .
var fs = require('fs');
var crypto = require('crypto');
function decrypt(aseKey, inputFile){
var fileBody = fs.readFileSync(inputFile)
var cipher = crypto.createDecipheriv("aes128", Buffer.from(aseKey), fileBody.slice(0,16))
var result = cipher.update(fileBody.slice(16))
fs.writeFileSync(inputFile+".n.ts", result)
}
decrypt("0123456789123456", "1.ts.aes")
Lampirkan fungsi golang untuk menyahsulit fail ini
func decrypt(aesKey string, inputFile string) {
ciphertext, err := ioutil.ReadFile(inputFile)
if err != nil {
panic(err.Error())
}
// Key
key := []byte(aesKey)
// Create the AES cipher
block, err := aes.NewCipher(key)
if err != nil {
panic(err)
}
// Before even testing the decryption,
// if the text is too small, then it is incorrect
if len(ciphertext) < aes.BlockSize {
panic("Text is too short")
}
// Get the 16 byte IV
iv := ciphertext[:aes.BlockSize]
// Remove the IV from the ciphertext
ciphertext = ciphertext[aes.BlockSize:]
// Return a decrypted stream
stream := cipher.NewCFBDecrypter(block, iv)
// Decrypt bytes from ciphertext
stream.XORKeyStream(ciphertext, ciphertext)
// create a new file for saving the encrypted data.
f, err := os.Create(inputFile + ".ts")
if err != nil {
panic(err.Error())
}
_, err = io.Copy(f, bytes.NewReader(ciphertext))
if err != nil {
panic(err.Error())
}
}
func main() {
key := "0123456789123456"
decrypt(key, "1.ts.aes")
}
https://github.com/danielecr/aes128encrypter
Kod berikut menggunakan AES192, serupa dengan 128. Anda boleh klik untuk melihat sumber kod sumber.