Asked May 6th, 4:22 p.m. 87 0 0
  • 87 0 0
0

Encrypt data trong angular

Share
  • 87 0 0

Chào moi người. Em đang sử dụng thư viện crypto-js để encrypt data từ front-end (angular) và decrypt data đó phía backend (nodejs). Hiện tại phía backend đã viết xong và test chạy được.

Decrypt phía backend

function decryptRSA(privateKey, encryptedString) {
    const crypto = require('crypto');
        const buffer = Buffer.from(encryptedString, 'base64');
        let decryptedData = crypto.privateDecrypt(
            {
                key: privateKey,
                padding: crypto.constants.RSA_PKCS1_PADDING,
            },
            buffer
        );
        return decryptedData.toString('utf-8');
}

function decryptAES(key, encryptedBase64String) {
    const crypto = require('crypto');
    const stringBuffer = Buffer.from(encryptedBase64String, AES_CONFIG.encryptionEncoding);
    const keyBuffer = Buffer.from(key, AES_CONFIG.encryptionEncoding);
    const decipher = crypto.createDecipheriv(AES_CONFIG.encryptionType, keyBuffer, "");
    return decipher.update(stringBuffer) + decipher.final();
}

function decryptHybrid(privateKey, encryptedKey, encryptedData) {
    const key = decryptRSA(privateKey, encryptedKey);
    return decryptAES(key, encryptedData);
}

Phía front-end em cũng sử dụng crypto-js để encrypt data nhưng lại không tìm thấy chuẩn RSA để encrypt nên em sử dụng node-forge để thay thế và thử encrypt 1 key để test nhưng data truyền sang phía back end decrypt lại k đúng. Em đã mò vài ngày mà k ăn thua, nhờ mọi người xem giúp và cho em giải pháp với ạ. phía bên frontend (angular) nên dùng thư viện nào để encrypt theo chuẩn RSA và AES và tại sao cùng 1 thư viện mà nodejs và angular lại khác nhau như vậy ạ? có phải là do phía fontend là viết bằng typescript k ạ?

Test encrypt thử 1 key phía fontend

        let randomKey = forge.random.getBytesSync(32);
        randomKey = forge.util.encode64(randomKey, 32);
        const pk = forge.pki.publicKeyFromPem(this.publicKey);
        const encryptKey = forge.util.encode64(pk.encrypt(forge.util.hexToBytes(randomKey)));
Viblo
Let's register a Viblo Account to get more interesting posts.