node.js - Bagaimana untuk menyahsulit fail yang disulitkan oleh golang dengan nodejs?
PHP中文网
PHP中文网 2017-05-31 10:39:35
0
3
1196

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")
}
PHP中文网
PHP中文网

认证0级讲师

membalas semua(3)
phpcn_u1582

https://github.com/danielecr/aes128encrypter

我想大声告诉你

Kod berikut menggunakan AES192, serupa dengan 128. Anda boleh klik untuk melihat sumber kod sumber.

var crypto = require('crypto');
var key = crypto.randomBytes(192/8);  // 替换成自己需要的key
var iv = crypto.randomBytes(128/8);  // 替换成自己需要的iv
var algorithm = 'aes192';

function encrypt(text){
    var cipher = crypto.createCipheriv(algorithm, key, iv);
    cipher.update(text);
    return cipher.final('hex');
}

function decrypt(encrypted){
    var decipher = crypto.createDecipheriv(algorithm, key, iv);
    decipher.update(encrypted, 'hex');
    return decipher.final('utf8');
}

var content = 'hello';
var crypted = encrypt('hello');
console.log( crypted );  // 输出:1b87be446405ff910cd280ae6aa0423f

var decrypted = decrypt( crypted );
console.log( decrypted );  // 输出:hello
过去多啦不再A梦
var fs = require('fs');
var crypto = require('crypto');
function decrypt(aseKey, inputFile){
    var fileBody = fs.readFileSync(inputFile)
    var  decipher =  crypto.createDecipheriv("aes-128-cfb",new Buffer(aseKey) , fileBody.slice(0,16))
    var recv = decipher.update(fileBody.slice(16))
    fs.writeFileSync(inputFile + ".n.ts", recv)
}

decrypt("0123456789123456", "1.ts.aes")
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan