在 angular 9 中使用节点加密
Use node crypto in angular 9
我的项目在 Angular 6 中,它有以下代码行
const crypto = require('crypto-js');
const Buffer = require('buffer').Buffer;
const decrypt = new Buffer(data.result.encr, 'base64');
const privatekey = Buffer.from(data.result.pk, 'base64');
this.decrypted = crypto.privateDecrypt(privatekey, decrypt).toString('utf-8');
return this.decrypted;
工作正常。
现在我将我的代码迁移到 Angular 9。我发现 NPM
不再支持 crypto
https://www.npmjs.com/package/crypto
它说我必须使用加密的内置库。但是我不知道怎么用。
我认为 crypto-js
会帮助我。但是没有。
如果有人知道如何在 Angular 9 中使用 crypto
或者如何将上行转换为 crypto-js
那就太好了。
注意:加密是在服务器端使用加密进行的,因为它们只有 nodejs。
提前致谢。
经过 3-4 天,我终于能够解决这个问题。
- 我安装了crypto-browserify。
- 删除 node_modules 文件夹,然后使用
npm-install
再次安装所有依赖项
crypto-browserify
提供与 crypto
相同的功能
我最近在我的 MEAN Stack 应用程序中实现了这一点。使用以下命令安装 crypto-js 后:
npm i crypto-js --save
Angular-9中的以下服务,可在整个项目中用于加密和解密。
import { Injectable } from '@angular/core';
import * as CryptoJS from 'crypto-js';
import { environment } from 'src/environments/environment';
@Injectable({
providedIn: 'root'
})
export class CryptoJsService {
constructor() { }
get jsonFormatter() {
return {
stringify: (cipherParams: any) => {
const jsonObj = { ct: cipherParams.ciphertext.toString(CryptoJS.enc.Base64), iv: null, s: null };
if (cipherParams.iv) {
jsonObj.iv = cipherParams.iv.toString();
}
if (cipherParams.salt) {
jsonObj.s = cipherParams.salt.toString();
}
return JSON.stringify(jsonObj);
},
parse: (jsonStr) => {
const jsonObj = JSON.parse(jsonStr);
// extract ciphertext from json object, and create cipher params object
const cipherParams = CryptoJS.lib.CipherParams.create({
ciphertext: CryptoJS.enc.Base64.parse(jsonObj.ct)
});
if (jsonObj.iv) {
cipherParams.iv = CryptoJS.enc.Hex.parse(jsonObj.iv);
}
if (jsonObj.s) {
cipherParams.salt = CryptoJS.enc.Hex.parse(jsonObj.s);
}
return cipherParams;
}
};
}
/* Method for Encryption */
encrypt(value: any) {
const key = environment.crypto_js_key; // SECRET KEY FOR ENCRYPTION
value = value instanceof String ? value : JSON.stringify(value);
const encrypted = CryptoJS.AES.encrypt(value,key,
{ format: this.jsonFormatter, mode: CryptoJS.mode.CBC }).toString();
return encrypted;
}
/* Method for Decryption */
decrypt(value: any): any {
const key = environment.crypto_js_key; //SECRET KEY FOR ENCRYPTION
const decrypted = CryptoJS.AES.decrypt(value, key, {format: this.jsonFormatter }).toString(CryptoJS.enc.Utf8);
return JSON.parse(decrypted);
}
}
在 Nodejs 中,可以在整个应用程序中使用以下实用程序:
var CryptoJS = require('crypto-js');
var config = require('../config/environment');
module.exports.encrypt = function(value){
var JsonFormatter = {
stringify: function(cipherParams){
var jsonObj = { ct: cipherParams.ciphertext.toString(CryptoJS.enc.Base64) };
if (cipherParams.iv) {
jsonObj.iv = cipherParams.iv.toString();
}
if (cipherParams.salt) {
jsonObj.s = cipherParams.salt.toString();
}
return JSON.stringify(jsonObj);
},
parse: function(jsonStr) {
var jsonObj = JSON.parse(jsonStr);
// extract ciphertext from json object, and create cipher params object
var cipherParams = CryptoJS.lib.CipherParams.create({
ciphertext: CryptoJS.enc.Base64.parse(jsonObj.ct)
});
if (jsonObj.iv) {
cipherParams.iv = CryptoJS.enc.Hex.parse(jsonObj.iv);
}
if (jsonObj.s) {
cipherParams.salt = CryptoJS.enc.Hex.parse(jsonObj.s);
}
return cipherParams;
}
}
value = value instanceof String ? value: JSON.stringify(value);
var encrypted = CryptoJS.AES.encrypt(value, config.crypto_js_key, {
format: JsonFormatter, mode: CryptoJS.mode.CBC
}).toString();
return encrypted;
}
module.exports.decrypt = function(value) {
return CryptoJS.AES.decrypt(value, config.crypto_js_key, {format: JsonFormatter }).toString(CryptoJS.enc.Utf8);
}
根据所需的哈希,对我来说最好的选择是 ts-md5 lib.
import {Md5} from 'ts-md5/dist/md5';
...
Md5.hashStr('blah blah blah'); // hex:string
Md5.hashStr('blah blah blah', true); // raw:Int32Array(4)
Md5.hashAsciiStr('blah blah blah'); // hex:string
Md5.hashAsciiStr('blah blah blah', true); // raw:Int32Array(4)
我的项目在 Angular 6 中,它有以下代码行
const crypto = require('crypto-js');
const Buffer = require('buffer').Buffer;
const decrypt = new Buffer(data.result.encr, 'base64');
const privatekey = Buffer.from(data.result.pk, 'base64');
this.decrypted = crypto.privateDecrypt(privatekey, decrypt).toString('utf-8');
return this.decrypted;
工作正常。
现在我将我的代码迁移到 Angular 9。我发现 NPM
不再支持crypto
https://www.npmjs.com/package/crypto
它说我必须使用加密的内置库。但是我不知道怎么用。
我认为 crypto-js
会帮助我。但是没有。
如果有人知道如何在 Angular 9 中使用 crypto
或者如何将上行转换为 crypto-js
那就太好了。
注意:加密是在服务器端使用加密进行的,因为它们只有 nodejs。
提前致谢。
经过 3-4 天,我终于能够解决这个问题。
- 我安装了crypto-browserify。
- 删除 node_modules 文件夹,然后使用
npm-install
再次安装所有依赖项
crypto-browserify
提供与 crypto
我最近在我的 MEAN Stack 应用程序中实现了这一点。使用以下命令安装 crypto-js 后:
npm i crypto-js --save
Angular-9中的以下服务,可在整个项目中用于加密和解密。
import { Injectable } from '@angular/core';
import * as CryptoJS from 'crypto-js';
import { environment } from 'src/environments/environment';
@Injectable({
providedIn: 'root'
})
export class CryptoJsService {
constructor() { }
get jsonFormatter() {
return {
stringify: (cipherParams: any) => {
const jsonObj = { ct: cipherParams.ciphertext.toString(CryptoJS.enc.Base64), iv: null, s: null };
if (cipherParams.iv) {
jsonObj.iv = cipherParams.iv.toString();
}
if (cipherParams.salt) {
jsonObj.s = cipherParams.salt.toString();
}
return JSON.stringify(jsonObj);
},
parse: (jsonStr) => {
const jsonObj = JSON.parse(jsonStr);
// extract ciphertext from json object, and create cipher params object
const cipherParams = CryptoJS.lib.CipherParams.create({
ciphertext: CryptoJS.enc.Base64.parse(jsonObj.ct)
});
if (jsonObj.iv) {
cipherParams.iv = CryptoJS.enc.Hex.parse(jsonObj.iv);
}
if (jsonObj.s) {
cipherParams.salt = CryptoJS.enc.Hex.parse(jsonObj.s);
}
return cipherParams;
}
};
}
/* Method for Encryption */
encrypt(value: any) {
const key = environment.crypto_js_key; // SECRET KEY FOR ENCRYPTION
value = value instanceof String ? value : JSON.stringify(value);
const encrypted = CryptoJS.AES.encrypt(value,key,
{ format: this.jsonFormatter, mode: CryptoJS.mode.CBC }).toString();
return encrypted;
}
/* Method for Decryption */
decrypt(value: any): any {
const key = environment.crypto_js_key; //SECRET KEY FOR ENCRYPTION
const decrypted = CryptoJS.AES.decrypt(value, key, {format: this.jsonFormatter }).toString(CryptoJS.enc.Utf8);
return JSON.parse(decrypted);
}
}
在 Nodejs 中,可以在整个应用程序中使用以下实用程序:
var CryptoJS = require('crypto-js');
var config = require('../config/environment');
module.exports.encrypt = function(value){
var JsonFormatter = {
stringify: function(cipherParams){
var jsonObj = { ct: cipherParams.ciphertext.toString(CryptoJS.enc.Base64) };
if (cipherParams.iv) {
jsonObj.iv = cipherParams.iv.toString();
}
if (cipherParams.salt) {
jsonObj.s = cipherParams.salt.toString();
}
return JSON.stringify(jsonObj);
},
parse: function(jsonStr) {
var jsonObj = JSON.parse(jsonStr);
// extract ciphertext from json object, and create cipher params object
var cipherParams = CryptoJS.lib.CipherParams.create({
ciphertext: CryptoJS.enc.Base64.parse(jsonObj.ct)
});
if (jsonObj.iv) {
cipherParams.iv = CryptoJS.enc.Hex.parse(jsonObj.iv);
}
if (jsonObj.s) {
cipherParams.salt = CryptoJS.enc.Hex.parse(jsonObj.s);
}
return cipherParams;
}
}
value = value instanceof String ? value: JSON.stringify(value);
var encrypted = CryptoJS.AES.encrypt(value, config.crypto_js_key, {
format: JsonFormatter, mode: CryptoJS.mode.CBC
}).toString();
return encrypted;
}
module.exports.decrypt = function(value) {
return CryptoJS.AES.decrypt(value, config.crypto_js_key, {format: JsonFormatter }).toString(CryptoJS.enc.Utf8);
}
根据所需的哈希,对我来说最好的选择是 ts-md5 lib.
import {Md5} from 'ts-md5/dist/md5';
...
Md5.hashStr('blah blah blah'); // hex:string
Md5.hashStr('blah blah blah', true); // raw:Int32Array(4)
Md5.hashAsciiStr('blah blah blah'); // hex:string
Md5.hashAsciiStr('blah blah blah', true); // raw:Int32Array(4)