2016-04-30 40 views
0

における公開鍵で文字列を暗号化することができません私は下に述べた暗号化関数を呼び出すしようとしています:最初は、私は未定義JSEncryptのための参照エラーを得ていた分度器

var encryptor = require("./jsencrypt.js"); 
this.encrypt = function() { 
    var key="LxVtiqZV6g2D493gDBfG0BfV6sAhteG6hOCAu48qO00Z99OpiaIG5vZxVtiqZV8C7bpwIDAQAB"; 
    encryptor = new JSEncrypt(); 
    encryptor.setPublicKey(key); 
    var newString = encryptor.encrypt('Password'); 
    console.log("Encrypted password =",newString); 
} 

を。 私はjsencrypt.jsファイルをダウンロードし、始めにvar encryptor = require("./jsencrypt.js");を追加しました。

は今、私は次のエラーを取得しています:

Message: 
ReferenceError: navigator is not defined 
Stacktrace: 
ReferenceError: navigator is not defined 
at e:\Praveen Data\Projects\ECP\CentralRegistryUI\TestScripts\Utils\jsencrypt.js:73:13 
at Object.<anonymous> (e:\Praveen Data\Projects\ECP\CentralRegistryUI\TestScripts\Utils\jsencrypt.js:4342:3) 
at require (module.js:385:17) 

はjsencrypt.jsでwindows.navigatorを使用してみましたが、うまくいきませんでした。

答えて

1

私の同僚の一人が私に解決策を教えてくれました。 だからここで私は、暗号化する機能を持っている:

this.initializeEncryptedPassword =() => { 
    //console.log("before calling encrypt... "); 
    browser.executeScript(() => { 
     //console.log("Starting to return encryptor..."); 
     return window.loginEncryptor.encrypt(window.loginPassword); 
    }).then((encryptedPassword) => { 
     this.encryptedPassword = encryptedPassword; 
    }); 
    //console.log("after calling encrypt..."); 
} 

この関数は、によって呼び出されている:

export default class Encryptor { 

    constructor($window, $http) { 
    'ngInject'; 
    this.encryptor = new $window.JSEncrypt(); 
    //Need to use HTTP here instead of resource since the resource does not return plain text. 
    //Getting Public Key by hitting a rest uri. 
    $http({method: "GET", url: "/xyz/authenticate"}).success((item) => { 
     this.encryptor.setPublicKey(item); 
     //set the current encryptor on the window so that testing can use it 
     $window.loginEncryptor = this.encryptor; 
    }); 
    } 

    encryptPassword(credentials) { 
    credentials.password = this.encryptor.encrypt(credentials.password); 
    } 

} 

このヘルプ他人を願っています。

1

ブラウザの環境ではなく、node.jsでナビゲータオブジェクトが使用できないため、テストは実行されません。 JSEncryptは、さまざまなブラウザやバージョン間でクライアント側で動作するために、JSEncryptに依存しています。

これはJSEncryptコードの多くの場所で参照されていますので、私の最善の策は、あなたのために動作するサーバー側の暗号化ライブラリに切り替えるか、可能でない場合はすべての予想されるプロパティ/メソッドChromeブラウザの場合 - node.jsはchromeのjsエンジン上で動作するので、うまく動作するはずです。

+0

トムありがとうございます。あなたが助言をしてくれたら、私はグローバルナビゲータのjsonオブジェクトを試してみましょう。私はそれを動作させることができたら、私はこのポストを解決コードで更新します。 – Praveen

+0

幸運Praveen :) –

関連する問題