AngularJS中的密码加密
答
使用HTTPS将其发送到服务器,然后加密/解密它的服务器端。出于安全原因,您不希望前端进行任何加密,这可能导致严重的安全漏洞。
答
使用以下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);
}
};
});
答
它更好地使用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
你在找https吗? – Weedoze
@KISHAN PATI我想建议你不要使用angular来加密你的密码 使用你的后端技术java或你正在使用的是什么 –
不要加密它,通过HTTPS发送它并让后端完成它的工作。 – dfsq