登录密码加密

一、登录密码加密的测试

测试密码加密是验证加密算法是否正确的重要步骤。为了确保密码加密的正确性,可以使用加密库的自带函数来进行测试。

以Node.js举例,可以使用crypto模块来测试加密算法:

const crypto = require('crypto');

const password = '123456';
const salt = crypto.randomBytes(16).toString('hex');

const hash = crypto.pbkdf2Sync(password, salt, 10000, 64, 'sha512').toString('hex');

console.log('Salt:', salt);
console.log('Hash:', hash);

上述代码使用了Node.js内置的crypto模块,通过pbkdf2Sync算法将密码加密并输出加密后的Hash值以及Salt值。

二、登录密码加密的传输

为了保证密码在传输过程中的安全性,加密算法需要支持用公钥进行加密,在服务器端使用私钥进行解密。这里可以使用OpenSSL库来生成公钥和私钥。

生成私钥:

openssl genrsa -out private.pem 2048

生成公钥:

openssl rsa -in private.pem -pubout -out public.pem

在服务器端加密密码并使用私钥解密:

const crypto = require('crypto');
const fs = require('fs');

const password = '123456';
const salt = crypto.randomBytes(16).toString('hex');
const privateKey = fs.readFileSync('private.pem');
const publicKey = fs.readFileSync('public.pem');

const encryptedPassword = crypto.publicEncrypt(publicKey, Buffer.from(password + salt));
const decryptedPassword = crypto.privateDecrypt(privateKey, encryptedPassword);

console.log('Salt:', salt);
console.log('Encrypted Password:', encryptedPassword.toString('hex'));
console.log('Decrypted Password:', decryptedPassword.toString());

上述代码使用了crypto库进行RSA加密,使用Buffer处理密码加入Salt值后进行加密,最后使用私钥进行解密。

三、前端登录密码加密

用户的密码在前端直接进行加密是有风险的,因为前端代码可以被修改。为此,前端密码加密需要使用公钥进行加密,同时,在服务器端需要使用私钥进行解密。

在前端页面引入CryptoJS库进行加密:

<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.0.0/crypto-js.min.js" integrity="sha512-nlZGu3xj7RbFl9T/AI4iKQ+UAbkWPLKKPqWMpL9FMumq1Vlcqy/mlqcB1sGgh8rTWnlH+PjAXv9L2kGcvdWXTA==" crossorigin="anonymous"></script>

在前端页面使用公钥对密码进行加密:

const publicKey = '-----BEGIN PUBLIC KEY-----\n' +
  'MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAn/4NB06nsxIxAdi4Zkfi\n' +
  'rEVv1ZMdTTzoYaleBrXt+5yuTEe/d7JbLux7VrnwBzvBcKEOS5Mu6/3AWAFNBt3N\n' +
  'Ksd4CkWjbG47nfrZVG+sKcfrmtztUv7jJRV+arquA2ukYAKsKZ9SZObhkHXRqNKa\n' +
  '8Ug2fRs5rnAGKeAJS/4qT8PFMGqopflpj3as4XKUlljRzt8G9RQxYDAWGWXaUdBU\n' +
  'z4/H+hYrhhN+bxQYa2meK4pfJMBiUWMHJz5jJpFLCN+8CfJ5E2a9y+8NtiKueQRX\n' +
  'pnCcWZvGb5UE4llkMgW0cAain43poX2TXVflUz5nJp9R69zLYYTaze4sBu0GkAkc\n' +
  'tas35ibCCub2Jt7E/DsDWoD5EvLY+9BddgrFRKbuoz3/SbsG6pQ3WoLXIK/1hbRh\n' +
  'VbTUQ/sdrbU9gYCnJob2TIzX9RKmZuImB7nHJROExoMjnUjgAQ1GNaJkcuf69QOH\n' +
  '8+G25Jmx/X/1JiGnzDiVCXa8vwh/+8OZStGJ/l9nCfLSS3N3ysBbJvF+AdZGpcJH\n' +
  'xRfcjJCPB0+iIHvCF2CL5W/KEc2G0MrZL8x8pEpnDllzEh8YlZAYVZ0clGvAWp0u\n' +
  'y7ijV+wRleQLdO+7P+uy+AEZcnLXPZ+OIH/X3ySPD0GzmW/cv20DLKfTT4VJ13ZF\n' +
  'r9fBTNF0P4B9IWojGIVE3U0CAwEAAQ==\n' +
  '-----END PUBLIC KEY-----\n';

const password = '123456';
const salt = 'iL+s5uM3NTWCcJhOGU1bbw==';
const encrypted = CryptoJS.AES.encrypt(password + salt, publicKey);

console.log('Encrypted Password:', encrypted.toString());

在服务器端使用私钥对密码进行解密:

const crypto = require('crypto');
const fs = require('fs');

const privateKey = fs.readFileSync('private.pem');

const encryptedPassword = '1pPvj5ZjvJcAQwDmULHAuIdXJJb3yKsVcjCMzLeKFM8B+dUaPPwsCgghG5cmTN48PJN0/OmZnKSFw84m63p+Eg==';
const decryptedPassword = crypto.privateDecrypt(privateKey, Buffer.from(encryptedPassword, 'base64'));

console.log('Decrypted Password:', decryptedPassword.toString());

四、前端密码加密方式

前端密码加密的方式有多种,如MD5加密、SHA1加密、SHA256加密、AES加密等等。由于MD5、SHA1等常见加密方式已经被人们破解,因此推荐使用AES等更加安全的加密方式。

在前端页面使用CryptoJS库的AES加密:

const password = '123456';
const salt = 'iL+s5uM3NTWCcJhOGU1bbw==';
const key = CryptoJS.enc.Utf8.parse(salt);
const encrypted = CryptoJS.AES.encrypt(password, key, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 });

console.log('Encrypted Password:', encrypted.toString());

在服务器端使用crypto模块的AES解密:

const crypto = require('crypto');

const password = '123456';
const salt = 'iL+s5uM3NTWCcJhOGU1bbw==';
const key = Buffer.from(salt, 'base64');

const cipher = crypto.createDecipheriv('aes-256-ecb', key, '');

const decryptedPassword = Buffer.concat([cipher.update(Buffer.from(password, 'base64')), cipher.final()]);

console.log('Decrypted Password:', decryptedPassword.toString());

五、登录密码加密方式

登录密码加密的方式有多种,如MD5加盐、SHA256加盐、PBKDF2加盐等等。其中,PBKDF2算法是目前最为安全的密码加密算法之一,应用广泛。

在服务器端使用crypto模块的PBKDF2算法加密密码:

const crypto = require('crypto');

const password = '123456';
const salt = crypto.randomBytes(16).toString('hex');
const iterations = 10000;
const keylen = 64;
const digest = 'sha512';

const hash = crypto.pbkdf2Sync(password, salt, iterations, keylen, digest).toString('hex');

console.log('Salt:', salt);
console.log('Hash:', hash);

在服务器端使用PBKDF2算法校验密码:

const crypto = require('crypto');

const password = '123456';
const salt = '13b80062ce7c77bfcca92fdea06ab312';
const iterations = 10000;
const keylen = 64;
const digest = 'sha512';
const hash = 'd23a70c521e860f96e3053e2bbad23a9822670c7579d5ec803fe16325c44187b5973880b0fbe0cfdefb9a6ebd90225aa68692e8049aa5f5a319edfae0a83896a';

const verifyHash = crypto.pbkdf2Sync(password, salt, iterations, keylen, digest).toString('hex');

if (hash === verifyHash) {
  console.log('Password is correct');
} else {
  console.log('Password is incorrect');
}

六、登录密码加密流程

登录密码加密的流程包括生成随机盐、密码加盐、使用哈希函数进行多次迭代,最后保存加盐的哈希值和盐值。

服务器端使用crypto库的PBKDF2算法进行加密:

const crypto = require('crypto');

const password = '123456';
const salt = crypto.randomBytes(16).toString('hex');
const iterations = 10000;
const keylen = 64;
const digest = 'sha512';

const hash = crypto.pbkdf2Sync(password, salt, iterations, keylen, digest).toString('hex');

console.log('Salt:', salt);
console.log('Hash:', hash);

保存生成的salt和hash值后,可以将其存储到数据库中。在登录验证时,可以使用保存的salt和用户输入的密码一起进行PBKDF2算法加密,然后将结果与保存的hash值进行比对,以此来验证用户密码的正确性。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/151124.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝的头像小蓝
上一篇 2024-11-10 01:12
下一篇 2024-11-10 01:12

相关推荐

  • Python暴力破解wifi密码

    简介:本文将从多个方面详细介绍使用Python暴力破解wifi密码的方法。代码实例将被包含在本文中的相关小节中。 一、如何获取wifi密码 在使用Python暴力破解wifi密码之…

    编程 2025-04-27
  • Python 编写密码安全检查工具

    本文将介绍如何使用 Python 编写一个能够检查用户输入密码安全强度的工具。 一、安全强度的定义 在实现安全检查之前,首先需要明确什么是密码的安全强度。密码的安全强度通常包括以下…

    编程 2025-04-27
  • jiia password – 保护您的密码安全

    你是否曾经遇到过忘记密码、密码泄露等问题?jiia password 正是一款为此而生的解决方案。本文将从加密方案、密码管理、多平台支持等多个方面,为您详细阐述 jiia pass…

    编程 2025-04-27
  • Python解锁Wi-Fi密码

    想要解锁Wi-Fi密码,你需要使用Python编程语言。Python是一种高层次、面向对象、解释型的动态编程语言。许多人都可以轻松学习Python,并用它来编写各种各样的程序。在本…

    编程 2025-04-27
  • Python随机密码生成代码

    本文将会从以下几个方面对Python随机密码生成代码进行详细阐述: 一、密码生成原理 密码生成的原理是利用随机数生成器生成随机字符或数字,根据一定的规则组合成所需要的密码。 在Py…

    编程 2025-04-27
  • Ingress要密码强制卸载

    当我们需要强制卸载Ingress应用时,我们可能会发现需要验证Google账户的密码才能够进行操作,因此本文将教大家如何绕过Google验证,实现Ingress应用的强制卸载。 一…

    编程 2025-04-25
  • 群晖root密码详解

    一、root密码的概念 root密码是指用于登录群晖系统管理员账户root的密码。root是拥有系统最高权限的账户,使用root账户可以操作系统中的所有资源和数据,因此root密码…

    编程 2025-04-25
  • 深入理解Linux密码

    一、密码的基本原理 密码是防止恶意访问的基本手段。在Linux系统中,用户的密码存储在/etc/shadow文件中,只有特权用户能够读取。密码的存储采用MD5或SHA256算法进行…

    编程 2025-04-24
  • MySQL8修改root密码详解

    MySQL是一款开源的关系型数据库管理系统,常用于Web应用程序中作为数据库服务器。作为MySQL的最高权限者,root账号可以对数据库进行管理和控制。在MySQL的安装和使用过程…

    编程 2025-04-23
  • inputpassword: 密码输入框的全方位解析

    在当今社会,人们经常需要使用密码,比如各种账号密码、手机密码、银行卡密码等。密码的安全性非常重要,而密码输入框(inputpassword)设计的好坏也直接影响到密码的安全性。本文…

    编程 2025-04-23

发表回复

登录后才能评论