中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用JavaScript Service在.NET Core里實現DES加密算法

發布時間:2021-09-30 09:53:26 來源:億速云 閱讀:155 作者:柒染 欄目:大數據

這篇文章將為大家詳細講解有關如何使用JavaScript Service在.NET Core里實現DES加密算法,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

Node.js的Crypto庫就提供各種加密算法,可以非常方便地讓我們使用密碼技術,解決應用開發中的問題。Crypto庫是隨Nodejs內核一起打包發布的,主要提供了加密、解密、簽名、驗證等功能。Crypto利用OpenSSL庫來實現它的加密技術,它提供OpenSSL中的一系列哈希方法,包括hmac、cipher、decipher、簽名和驗證等方法的封裝。Crypto官方文檔:http://nodejs.org/api/crypto.html, 博客文章http://blog.fens.me/nodejs-crypto/ 寫的非常詳細。本文介紹如何使用Crypto的DES算法就可以幫助我們實現立即可用的DES算法。 

1、我們參照官方文檔 https://github.com/aspnet/JavaScriptServices/tree/dev/src/Microsoft.AspNetCore.NodeServices#microsoftaspnetcorenodeservices,我們創建一個.NET Core Console應用程序 DotNETNodeApp,添加Microsoft.AspNetCore.NodeServices 包引用:

Install-Package Microsoft.AspNetCore.NodeServices –Pre

2、配置環境,.NET Core默認都是采用的依賴注入模式,我們在這個JavaScriptService中間件也有需求使用到依賴注入,具體參考dudu的文章:在.NET Core控制臺程序中使用依賴注入


IServiceCollection services = new ServiceCollection();
//注入
services.AddNodeServices(options =>
{
    options.ProjectPath = @"C:\Users\geffz\Documents\visual studio 2015\Projects\DotNETNodeApp\src\DotNETNodeApp";
    options.WatchFileExtensions = new[] { ".js", ".sass" };
    // ... etc. - see other properties below
});

//構建容器
IServiceProvider serviceProvider = services.BuildServiceProvider();
INodeServices nodeServices = serviceProvider.GetRequiredService<INodeServices>();

3、我們在項目創建一個Node文件夾,然后添加一個cryptUtil.js, 文件內容如下:

var crypto = require('crypto');

module.exports = {
    encrypt: function (callback,plaintext, key,iv) {
        var ecb =  'des-ecb';
        var enkey = new Buffer(key);
        var eniv = new Buffer(iv ? iv : 0);
        var cipher = crypto.createCipheriv(ecb, enkey, eniv);
        cipher.setAutoPadding(true)  //default true
        var ciph = cipher.update(plaintext, 'utf8', 'base64');
        ciph += cipher.final('base64');
        callback(null /* error */, ciph);
    },

    decrypt: function (callback, encrypt_text,key, iv) {
      var ecb =  'des-ecb';
      var dekey = new Buffer(key);
        var deiv = new Buffer(iv ? iv : 0);
        var decipher = crypto.createDecipheriv(ecb, dekey, deiv);
        decipher.setAutoPadding(true);
        var txt = decipher.update(encrypt_text, 'base64', 'utf8');
        txt += decipher.final('utf8');
        callback(null, txt);
    }
};

這里有有個JS函數,它將在.NET 程序中被調用,通過傳入一個 Node風格的回調函數和三個參數來計算結果。在NodeJS中,一個 JS 文件即代表一個模塊,module.exports的意思是把當前函數作為一個對象提供出去以供調用,我們這里有兩個函數分別代表加密/解密。

4、創建一個Des 類封裝NodeJs的函數調用:

using Microsoft.AspNetCore.NodeServices;
using System.Threading.Tasks;

namespace DotNETNodeApp
{
    public class Des
    {
        private INodeServices nodeServices;

        public Des(INodeServices nodeServices)
        {
            this.nodeServices = nodeServices;
        }

        public async Task<string> EncryptDES(string data, string key, int iv)
        {
            var result = await nodeServices.InvokeExportAsync<string>("./Node/cryptUtil", "encrypt", data, key, iv);
            return result;
        }

        public async Task<string> DecryptDES(string data, string key, int vi)
        {
            var result = await nodeServices.InvokeExportAsync<string>("./Node/cryptUtil", "decrypt", data,key , vi);
            return result;
        }
    }

我們再看一下InvokeExportAsync<T>(``),他是一個異步的方法,通過傳入一個node.js腳本文件(模塊),三個形參來得到一個結果。

方法簽名:InvokeExportAsync<T>(string moduleName, string exportName, params object[] args)

5、我們在控制臺里測試下我們的封裝效果   

 Des desUtil = new Des(nodeServices);
            string data = "geffzhang";
            string key = "12345678";

            string temp = desUtil.EncryptDES(data, key, 0).Result;
            Console.WriteLine(temp);
            string end = desUtil.DecryptDES(temp,key,0).Result;
            Console.WriteLine(end);
            Console.Read();

6、這樣使用的性能如何呢,我們用性能測試組件BenchmarkDotNet看下性能數據,使用方法參考 .NET Core性能測試組件BenchmarkDotNet 支持.NET Framework Mono:我們創建一個類DesBenchmark,在方法中加入Benchmark 特性

using BenchmarkDotNet.Attributes;
using Microsoft.AspNetCore.NodeServices;
using System;
using Microsoft.Extensions.DependencyInjection;
using BenchmarkDotNet.Running;

namespace DotNETNodeApp
{
    public class DesBenchmark
    {
        private IServiceCollection services;
        private IServiceProvider serviceProvider;
        private INodeServices nodeServices;

        public DesBenchmark()
        {
            IServiceCollection services = new ServiceCollection();
            //注入
            services.AddNodeServices(options =>
            {
                options.ProjectPath = @"C:\Users\geffz\Documents\visual studio 2015\Projects\DotNETNodeApp\src\DotNETNodeApp";
                options.WatchFileExtensions = new[] { ".js", ".sass" };
                // ... etc. - see other properties below
            });

            //構建容器
            serviceProvider = services.BuildServiceProvider();
            nodeServices = serviceProvider.GetRequiredService<INodeServices>();
        }

        private string data = "geffzhang"; 
        private string encryData = "uTRLyNkKTaFUxmJtHPlYoA==";
        private string key = "12345678";

        [Benchmark]
        public string EncryptDES()
        {
            Des desUtil = new Des(nodeServices);
            return desUtil.EncryptDES(data, key, 0).Result;
        }

        [Benchmark]
        public string DecryptDES()
        {
            Des desUtil = new Des(nodeServices);
            return desUtil.EncryptDES(encryData, key, 0).Result;
        }

    }
}

下面是控制臺輸出的結果,性能還是不錯的

如何使用JavaScript Service在.NET Core里實現DES加密算法

關于如何使用JavaScript Service在.NET Core里實現DES加密算法就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

辽宁省| 抚顺市| 政和县| 乌兰浩特市| 白水县| 柘荣县| 砀山县| 南乐县| 长顺县| 和平县| 城口县| 安岳县| 田东县| 灌云县| 密云县| 乌鲁木齐市| 花莲县| 万盛区| 宁海县| 瑞丽市| 湖州市| 沾益县| 龙泉市| 合阳县| 顺平县| 长岛县| 屏山县| 彩票| 神池县| 南丹县| 香格里拉县| 霍州市| 隆尧县| 集贤县| 平湖市| 乡宁县| 布尔津县| 盖州市| 玛多县| 剑河县| 宜黄县|