2016-04-30 8 views
0

Я пытаюсь вызвать функцию шифрует упомянутую ниже:не в состоянии зашифровать строку с помощью открытого ключа в транспортире

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. Итак, я загрузил 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) 

Пробовал с помощью windows.navigator в jsencrypt.js, но не работает.

ответ

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, поэтому лучше всего будет либо переключиться на библиотеку шифрования на стороне сервера, которая будет работать на вас, либо, если это невозможно, издеваться над глобальным навигационным json-объектом со всеми ожидаемыми свойствами/методами как если это браузер Chrome - node.js работает на js-движке хром, поэтому он должен работать нормально.

+0

Спасибо Том. Как вы напомнили, я попытаюсь использовать объект глобального навигатора json и заставить его работать. Я буду обновлять этот пост с помощью кода решения, если я смогу заставить его работать. – Praveen

+0

удачи Правеен :) –