第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

(NODEJS) AES-256-GCM解密后破解pdf,gzip,png編碼

(NODEJS) AES-256-GCM解密后破解pdf,gzip,png編碼

慕村225694 2023-03-24 13:38:44
我希望我能得到幫助,因?yàn)槲也恢罏槭裁次业?AES-GCM 實(shí)現(xiàn)會(huì)破壞文件編碼。我有一個(gè) API,它使用 1 個(gè)函數(shù)通過 AES-256-GCM 進(jìn)行加密/解密。(使用 KEY=32 個(gè)隨機(jī)字節(jié)的緩沖區(qū))這是功能:const aes256gcm = (key) => {    const ALGO = 'aes-256-gcm';    const encrypt = (str) => {        try {            const salt = crypto.randomBytes(64);            const iv =  crypto.randomBytes(32);            let derivedkey = crypto.pbkdf2Sync(key, salt, 55000, 32, 'sha512');            const cipher = crypto.createCipheriv(ALGO, derivedkey, iv);            let encrypted = Buffer.concat([cipher.update(str), cipher.final()]);            const tag = cipher.getAuthTag();            let buffer = Buffer.concat([salt, iv, encrypted]);            encrypted = {                tag: tag,                buffer: buffer            }            return encrypted;        } catch (e) {            console.log(e);        }    };    const decrypt = (data, authTag) => {        try {            const salt = data.slice(0, 64);            const iv = data.slice(64, 96);            const text = data.slice(96, data.length);            authTag = new Buffer.from(authTag, 'base64');            let derivedkey = crypto.pbkdf2Sync(key, salt, 55000, 32, 'sha512');            let decipher = crypto.createDecipheriv(ALGO, derivedkey, iv);            decipher.setAuthTag(authTag);            let decrypted = decipher.update(text, 'binary') + decipher.final();            return decrypted;        } catch (e) {            console.log(e);        }    };    return {        encrypt,        decrypt    };};使用此代碼,我將結(jié)果加密并寫入文件:const aesCipher = aes.aes256gcm(aes.loadKey(path.resolve(__dirname, `key`)));            const encrypted = aesCipher.encrypt(file.data);            if (encrypted !== undefined) {                fs.writeFile(`${file.name}.enc`, encrypted.buffer, function (err) {                    if (err) return console.log(err);                    console.log(`${file.name}.enc successfully created`);                });            }我的輸入/輸出文件的差異: 差異那么,我做錯(cuò)了什么?我的加密過程好嗎?為什么這只適用于 .txt 文件?
查看完整描述

1 回答

?
智慧大石

TA貢獻(xiàn)1946條經(jīng)驗(yàn) 獲得超3個(gè)贊

我認(rèn)為對(duì)你的解密函數(shù)做一個(gè)相當(dāng)小的改動(dòng)應(yīng)該可以解決這個(gè)問題,如果你只是將它更新為:


const decrypt = (data, authTag) => {

    try {

        const salt = data.slice(0, 64);

        const iv = data.slice(64, 96);

        const text = data.slice(96, data.length);

        authTag = new Buffer.from(authTag, 'base64');

        let derivedkey = crypto.pbkdf2Sync(key, salt, 55000, 32, 'sha512');

        let decipher = crypto.createDecipheriv(ALGO, derivedkey, iv);

        decipher.setAuthTag(authTag);

        let decrypted = Buffer.concat([decipher.update(text), decipher.final()]);

        return decrypted;

    } catch (e) {

        console.log(e);

    }

};

我認(rèn)為以前的實(shí)現(xiàn)沒有正確連接非文本文件的結(jié)果。


查看完整回答
反對(duì) 回復(fù) 2023-03-24
  • 1 回答
  • 0 關(guān)注
  • 354 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)