2016-08-24 535 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