web-dev-qa-db-ja.com

Advanced Encryption Standard Algorithm(AES)を使用してTypeScriptで文字列を暗号化し、C#で復号化します

TypeScriptでの暗号化とC#での復号化を実装するのに苦労しています。ここに質問を投稿する前に、Googleで検索していくつかのリンクを見つけましたが、それらのリンクはTypeScriptではなくJavaScriptに関連しています。

JavaScriptで暗号化し、AESアルゴリズムを使用してC#で復号化

angular2のcryptojsライブラリを使用してテキストを暗号化する

非コアnpmモジュールをAngular 2でインポートする方法(例:(暗号化ライブラリを使用するため))

現在のアプリケーションに暗号化/復号化の概念を実装するために、上記のリンクをたどりました。

これは私がmyservice.tsで記述したコードです

    //import { CryptoJS } from 'node_modules/crypto-js/crypto-js.js';
    //import 'crypto-js';
    import * as CryptoJS from 'crypto-js';


    var key = CryptoJS.enc.Utf8.parse('7061737323313233');
    var iv = CryptoJS.enc.Utf8.parse('7061737323313233');
    var encrypted = CryptoJS.AES.encrypt(CryptoJS.enc.Utf8.parse("It works"), key,
        {
            keySize: 128 / 8,
            iv: iv,
            mode: CryptoJS.mode.CBC,
            padding: CryptoJS.pad.Pkcs7
        });

    var decrypted = CryptoJS.AES.decrypt(encrypted, key, {
        keySize: 128 / 8,
        iv: iv,
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.Pkcs7
    });

    console.log('Encrypted :' + encrypted);
    console.log('Key :' + encrypted.key);
    console.log('Salt :' + encrypted.salt);
    console.log('iv :' + encrypted.iv);
    console.log('Decrypted : ' + decrypted);
    console.log('utf8 = ' + decrypted.toString(CryptoJS.enc.Utf8));

上記のコード行をmyservice.tsに追加する前に、依存関係を "crypto-js"として追加しました:「^ 3.1.9-1」package.jsonファイル)。

上記の依存関係をpackage.jsonに追加した後、パッケージは正常に復元されました。しかし、それでもCryptoJSはmyservice.tsでcannot found name as CryptoJSのようなエラーを表示します。

ノードモジュールからCryptoJSをインポートする方法、およびTypeScriptで文字列を暗号化し、高度なセキュリティアルゴリズム(AES)を使用してC#で同じ文字列を復号化する方法を教えてください。

プラディープ

6
Pradeep

同様の問題がありました。 Angular 4/Angular-Cli 1.0.0を使用しています。

npm install crypto-js --save
npm install @types/crypto-js --save

これらの2つのコマンドの後で、「スクリプト」配列のangular-cli.jsonファイルのcrypto-jsライブラリを参照します。私の場合:

"scripts": [
    "../node_modules/crypto-js/crypto-js.js"
  ]

node_modules/@ typesディレクトリに、crypto-jsサブディレクトリがあることに気づくでしょう。したがって、コードにnode_modules/@types/crypto-js/index.d.tsファイルへの参照を入れ、 トリプルスラッシュディレクティブ を使用します、したがってコンパイラは、そのモジュールファイルをコンパイルするためにタイプファイルが必要であることを認識しています。

/// <reference path="relative_path_to_cypto_folder/index.d.ts" />

または、node_modules/@ types内の型定義を参照しているため、「path」の代わりに「types」属性を使用することもできます。

/// <reference types="crypto-js" />

その後、コードをそのまま使用できます。

/// <reference types="crypto-js" />

import * as CryptoJS from 'crypto-js';


var key = CryptoJS.enc.Utf8.parse('7061737323313233');
var iv = CryptoJS.enc.Utf8.parse('7061737323313233');
var encrypted = CryptoJS.AES.encrypt(CryptoJS.enc.Utf8.parse("It works"), key,
    {
        keySize: 128 / 8,
        iv: iv,
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.Pkcs7
    });

var decrypted = CryptoJS.AES.decrypt(encrypted, key, {
    keySize: 128 / 8,
    iv: iv,
    mode: CryptoJS.mode.CBC,
    padding: CryptoJS.pad.Pkcs7
});

console.log('Encrypted :' + encrypted);
console.log('Key :' + encrypted.key);
console.log('Salt :' + encrypted.salt);
console.log('iv :' + encrypted.iv);
console.log('Decrypted : ' + decrypted);
console.log('utf8 = ' + decrypted.toString(CryptoJS.enc.Utf8));
14
julianobrasil