2016-08-24 541 views
0

我有一个登录页面。当用户提供用户名和密码时,我想要加密密码并将其发送到服务器。我正在使用angular js应用程序,所以我想在角度中编写代码。请AngularJS中的密码加密

+2

你在找https吗? – Weedoze

+0

@KISHAN PATI我想建议你不要使用angular来加密你的密码 使用你的后端技术java或你正在使用的是什么 –

+0

不要加密它,通过HTTPS发送它并让后端完成它的工作。 – dfsq

回答

5

使用HTTPS将其发送到服务器,然后加密/解密它的服务器端。出于安全原因,您不希望前端进行任何加密,这可能导致严重的安全漏洞。

-2

使用以下ngEncryption工厂,您可以在Controller.js文件中加密您的数据并将其传递给apicontroller。我正在使用公用 - 专用密钥来加密/解密数据。这些密钥可以在Global.asax.cs文件中的Session_Start()事件中生成。

app.factory 
('ngEncryption', function() { 
    return { 
     encrypt: function (dataForEncrypt) { 
      jsRequest = {}; 

      var str = dataForEncrypt; 
      var xmlParams = $.cookie('ClientPublicKey'); 
      // Create a new instance of RSACryptoServiceProvider. 
      var rsa = new System.Security.Cryptography.RSACryptoServiceProvider(); 
      var reqArray = []; 
      var reqArraySize = 200; 
      if (str.length < reqArraySize) { 
       var data = System.Text.Encoding.UTF8.GetBytes(str); 
       // Import parameters from xml. 
       rsa.FromXmlString(xmlParams); 
       // Encrypt data (use OAEP padding).   

       var encryptedBytes = rsa.Encrypt(data, true); 
       // Convert encrypted data to Base64. 
       var encryptedString = System.Convert.ToBase64String(encryptedBytes) 
       // Replace plain password with encrypted data. 
       reqArray.push(encryptedString); 
       //break; 
      } 
      else { 
       var MaxCounterHeader = parseInt(Math.ceil(parseFloat(str.length/200))); 

       for (i = 0; i < MaxCounterHeader; i++) { 
        var newstring = str.substr(0, str.length > 200 ? 200 : str.length); 
        var data = System.Text.Encoding.UTF8.GetBytes(newstring); 
        rsa.FromXmlString(xmlParams); 
        var encryptedBytes = rsa.Encrypt(data, true); 
        // Convert encrypted data to Base64. 
        var encryptedString = System.Convert.ToBase64String(encryptedBytes) 
        reqArray.push(encryptedString); 
        str = str.replace(newstring, ''); 
       } 
      } 
      return JSON.stringify(reqArray); 
     } 
    }; 
}); 
0

它更好地使用https发送安全数据和服务器上的加密。 如果您仍想要在客户端代码中进行加密,则可以使用SHA256或SHA1或MD5。许多可用。 Angular-crypto提供了许多JS。 在html页面中包含对JS的引用,并在控制器中包含下面的行。

CryptoJS.SHA1($scope.newCustomer.password) 

为了良好的安全性,在服务器端,SALT您的哈希密码。

+1

“SHA256或SHA1或MD5”都不是加密,它们是单向加密散列函数。另外:只需将一个盐添加到散列函数对提高安全性没有多大作用。取而代之的是用随机盐对HMAC进行大约100毫秒的持续时间并用散列表保存盐。使用诸如password_hash,PBKDF2,Bcrypt和类似函数的函数。关键是要让攻击者花费大量时间通过强力查找密码。 – zaph