2016-08-24 4 views
0

하나의 로그인 페이지가 있습니다. 사용자가 사용자 이름과 암호를 줄 때 암호를 암호화하여 서버로 보내려고합니다. 각도 js 응용 프로그램을 사용하고 있으므로 각도에서 코드를 작성하고 싶습니다.AngularJS에서 비밀번호 암호화

+2

https를 찾으십니까? – Weedoze

+0

@KISHAN PATI 비밀번호를 암호화하는 데 각도를 사용하지 말 것을 제안합니다. 백엔드 기술 Java 또는 사용중인 것을 사용하십시오. –

+0

암호를 암호화하지 않고 HTTPS를 통해 보내고 백엔드가 그 작업을 수행하도록하십시오. – dfsq

답변

5

HTTPS를 사용하여 서버로 보낸 다음 서버 측에서 암호화/암호 해독하십시오. 보안상의 이유로 프론트 엔드가 심각한 암호화 결함을 초래할 수있는 암호화를 원하지 않습니다.

-2

다음 ngEncryption 팩토리를 사용하여 Controller.js 파일의 데이터를 암호화하고 apicontroller로 전달할 수 있습니다. Public-Private 키를 사용하여 암호화/암호 해독 용 데이터를 암호화합니다.이 키는 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) 

보안을 위해 서버 쪽에서 해쉬 된 암호를 기록하십시오.

+1

"SHA256 또는 SHA1 또는 MD5"는 암호화되지 않으며 단방향 암호화 해시 함수입니다. 또한 해시 함수에 소금을 추가하면 보안을 향상시키는 데별로 도움이되지 않습니다. 대신 HMAC를 무작위로 약 100ms의 지속 시간 동안 반복하고 소금을 해시로 저장하십시오. password_hash, PBKDF2, Bcrypt 및 유사한 기능과 같은 기능을 사용하십시오. 요점은 공격자가 무차별 적으로 암호를 찾는 데 많은 시간을 소비하게하는 것입니다. – zaph

관련 문제