• 哈希加密

    千次阅读 2019-09-20 14:28:23
    账号的密码是比较私密的,如果是明文进行传递,那么很容易被别人盗取,所以我们需要对密码进行一个加密处理,这里我使用一个第三方的模块 bcrypt bcrypt 依赖的安装需要的环境 python 2.x ; node-gyp;npm install ...

    账号的密码是比较私密的,如果是明文进行传递,那么很容易被别人盗取,所以我们需要对密码进行一个加密处理,这里我使用一个第三方的模块 bcrypt

    bcrypt 依赖的安装需要的环境

    1. python 2.x ;
    2. node-gyp;npm install -g node-gyp

    4. windows-build-tools;npm install --global --production windows-build-tools

    // 导入bcrypt
    const bcrypt = require('bcrypt');
    async function run () {
    	// 生成随机字符串
    	// genSalt方法接收一个数值作为参数
    	// 数值越大 生成的随机字符串复杂度越高
    	// 数值越小 生成的随机字符串复杂度越低
    	// 默认值是 10
    	// 返回生成的随机字符串
    	const salt = await bcrypt.genSalt(10);
    	// 对密码进行加密
    	// 1. 要进行加密的明文
    	// 2. 随机字符串
    	// 返回值是加密后的密码
    	const result = await bcrypt.hash('123456', salt);



    async function createUser() {
    							const salt = await bcrypt.genSalt(10);
    							const pass = await bcrypt.hash('123456', salt);
    							const user = await User.create({
    							username: 'wuwenfu',
    							email: 'wuwenfu@itcast.cn',
    							password: pass,
    							role: 'admin',
    							state: 0


     if (user) {
            // 将客户端传递过来的密码和用户信息中的密码进行比对
            // true 比对成功
            // false 对比失败
            let isValid = await bcrypt.compare(password, user.password);
            // 如果密码比对成功
            if (isValid) {
                // 登录成功
                // 将用户名存储在请求对象中
                req.username = user.username;
                // 重定向到用户列表页面
            } else {
                // 没有查询到用户
                res.status(400).render('admin/error', { msg: '邮箱地址或者密码错误' })
  • 哈希MD5 使用MD5的哈希加密
  • 哈希加密Secrecy and privacy are crucial for people. Throughout history, humankind has been interested in conveying messages in a way that other people won’t be able to understand. People use ...


    Secrecy and privacy are crucial for people. Throughout history, humankind has been interested in conveying messages in a way that other people won’t be able to understand. People use different languages, slang words, nonverbal cues to get their messages across without other people knowing. While these offer privacy to some degree, they are not suited for confidential data. Whether it’s an army trying to protect their secret plans, or children trying to make a joke that their teacher will not be able to understand, they might feel the need to use some sort of encryption.

    保密和隐私对人们至关重要。 在整个历史中,人类一直对以其他人无法理解的方式传达信息感兴趣。 人们使用其他语言,语,非语言暗示来传达信息,而其他人却不知道。 尽管它们在一定程度上提供了隐私,但它们不适合机密数据。 无论是想保护自己的秘密计划的军队,还是想开玩笑的老师都听不懂的孩子,他们可能会觉得需要使用某种加密技术。

    In the age of computers and the internet, cryptography is way more important than ever. So much so that it is almost impossible to avoid cryptography. From your cellphones to your smart fridges and even when you are reading this article you are using an encrypted connection. Encryption even enables us to make our payments using digital currencies. So how does it work?

    在计算机和互联网时代,加密比以往任何时候都更加重要。 如此之多,几乎避免加密是不可能的。 从手机到智能冰箱,甚至当您在阅读本文时,您都在使用加密连接。 加密甚至使我们能够使用数字货币付款。 那么它是怎样工作的?

    It is possible to encrypt data in two ways:


    1. Encrypting and decrypting using the same secret key. (Symmetric)

      使用相同的密钥进行加密和解密。 (对称)
    2. Encrypting with a key and decrypting with a different key. (Asymmetric)

      使用密钥加密和使用其他密钥解密。 (不对称)

    Before we move onto encryption, I would like to write about hashing. While the purpose of encrypting and decrypting the data is rather obvious, there are other subtle ways that we can use cryptography for. Knowing the legitimacy of the data is one of them. It is possible to use encryption algorithms to verify data. This process is called hashing and it doesn’t store the data itself but the summary of it. Hashes are also fixed in size, allowing people to transfer them easily. Their size depends on the algorithm. For example, a SHA1 hash is 40 characters long.

    在进行加密之前,我想写一下散列。 尽管加密和解密数据的目的非常明显,但是我们可以使用加密的其他微妙方式。 知道数据的合法性就是其中之一。 可以使用加密算法来验证数据。 此过程称为哈希,它不存储数据本身,而是存储数据摘要。 哈希也固定大小,使人们可以轻松转移它们。 它们的大小取决于算法。 例如,SHA1哈希长度为40个字符。

    Collisions are possible in some algorithms like md5. Collisions are highly problematic since they can lead to forgery. You should avoid using hashing algorithms with collisions.

    在某些算法(例如md5)中可能会发生冲突 。 碰撞非常严重,因为它们可能导致伪造。 您应该避免将散列算法与冲突一起使用。

    Keep in mind, hashing is not encrypting. It is not possible to reverse a hash using an algorithm or a key. However, it is possible to try different combinations with the same algorithm until you get the same hash. This requires an insane amount of computation power for complex data and it’s usually referred to as “Brute Forcing”.

    请记住,哈希未加密。 无法使用算法或密钥来反向散列。 但是,可以使用相同的算法尝试不同的组合,直到获得相同的哈希值为止。 这需要复杂数据的疯狂计算能力,通常被称为“ 蛮力 ”。

    To combat with computation cost of brute-forcing, people started to pre-compute hashes for common passwords and numbers. These pre-computed tables are called “Rainbow Tables”. Rainbow tables use storage instead of computation power as it is easier and cheaper to allocate disk space instead of increasing your processing power. You can even use a search engine to reverse some indexed hashes, try searching for “5f4dcc3b5aa765d61d8327deb882cf99”, it is an md5 hash of the word “password”.

    为了消除暴力破解的计算成本,人们开始预先计算常见密码和数字的哈希值。 这些预先计算的表称为“ 彩虹表 ”。 Rainbow表使用存储空间而不是计算能力,因为分配磁盘空间更容易且更便宜,而不是增加处理能力。 您甚至可以使用搜索引擎来反转一些索引的哈希,尝试搜索“ 5f4dcc3b5aa765d61d8327deb882cf99”,它是单词“ password”的md5哈希。

    Nowadays it is a common practice to add some random data while hashing. This process is called salting. Using this process prevents people from using tables and forces them to use computational power. It usually is not fancy, for example, if you wanted to salt “password”, you could just hash “GDzv7tF9fjcmWnpassword” instead. You should save the salt for each hash, so you could salt the user input and hash it again to compare. If you are going to hash passwords do not forget to take people’s passwords with a grain of salt.

    如今,一种常见的做法是在散列时添加一些随机数据。 此过程称为加盐。 使用此过程会阻止人们使用表格,并迫使他们使用计算能力。 例如,如果您想给“密码”加盐,则可以仅对“ GDzv7tF9fjcmWnpassword”进行哈希处理。 您应该为每个哈希值保存盐分,以便可以对用户输入盐分并再次对其进行哈希处理以进行比较。 如果要散列密码,请不要忘记使用别人的密码。

    You can watch this video from 3Blue1Brown to understand how hard it is to reverse a “sha256” hash.
    您可以从3Blue1Brown观看此视频,以了解反向“ sha256”哈希的难度。

    Now that I got hashing out of the way, I can write move onto symmetric and asymmetric encryption. These algorithms are designed to store data. The recipients in a conversation must be able to decrypt the messages they receive, otherwise, it’s garbled data. Decrypting data requires a key, anyone with the key can decrypt the data.

    现在,我已经摆脱了散列的麻烦,现在可以将代码写入对称和非对称加密了。 这些算法旨在存储数据。 对话中的收件人必须能够解密收到的消息,否则,它是乱码的数据。 解密数据需要密钥,拥有密钥的任何人都可以解密数据。

    - Symmetric Encryption


    Symmetric encryption is encryption with a single key. You can encrypt and decrypt the data with the same key. This is good for one-on-one conversations. Popular messaging apps such as WhatsApp, rely on this method.

    对称加密是使用单个密钥进行的加密。 您可以使用相同的密钥加密和解密数据。 这对于一对一的对话很有用。 诸如WhatsApp之类的流行消息传递应用程序都依赖于此方法

    For group chats, data for each member is encrypted, treating each member as a one-on-one chat with the sender. This is important because more people using the same key means a higher chance of a leak.

    对于群聊,将加密每个成员的数据,并将每个成员视为与发送者的一对一聊天。 这很重要,因为更多的人使用相同的密钥意味着泄漏的可能性更高。

    - Asymmetric Encryption


    A chain is only as strong as its weakest link. Asymmetric encryption allows people to send data without having the decryption key. Everything encrypted with the public key can be decrypted with the private key.

    一条链只有最薄弱的一环才牢固。 非对称加密使人们无需解密密钥即可发送数据。 用公钥加密的所有内容都可以用私钥解密。

    The most common asymmetric encryption algorithm is RSA. GPG (GNU Privacy Guard) is also used by many to secure personal communications.

    最常见的非对称加密算法是RSA 。 许多人还使用GPG(GNU隐私卫士)来保护个人通信。

    Both public and private keys of RSA can be used for encrypting and decrypting. You can encrypt data with one of the keys and decrypt it with the other. The same key cannot be used to decrypt the data, which allows people to share their public key without security risks. People can add their GPG keys on their profile, and receive encrypted messages from other people.

    RSA的公钥和私钥均可用于加密和解密。 您可以使用其中一个密钥加密数据,而使用另一个密钥解密数据。 不能使用同一密钥来解密数据,这使人们可以共享其公共密钥而没有安全风险。 人们可以在个人资料上添加他们的GPG密钥,并从其他人接收加密的消息。

    Asymmetric encryption is also used for SSH Authentication.


    Here’s how it works:


    1. If you want to use key-based authentication, you should have a list of authorized keys. The default location for this file is in `~/.ssh/authorized_keys`. In this file, there are public keys that are allowed to connect to the server. Public keys in this file are separated with line breaks.

      如果要使用基于密钥的身份验证,则应具有授权密钥的列表。 该文件的默认位置在“〜/ .ssh / authorized_keys”中。 在此文件中,存在允许连接到服务器的公共密钥。 此文件中的公钥用换行符分隔。
    2. When someone tries to connect to the server, they send their public key.

    3. If the public key is in the authorized_keys file, the server encrypts a random data with the public key and sends it to the user.

    4. The user decrypts the data with their private key and hashes the decrypted data, then sends the hash back.

    5. The server compares the hash with the original data hash. If it is a match, the authentication process is successful.

      服务器将哈希与原始数据哈希进行比较。 如果匹配,则认证过程成功。

    Every encryption algorithm requires a key exchange as long as there is a recipient. Handing the keys over in person would be secure, but it is not always viable. For example, NIST only delivers keys by US mail or FAX. As I mentioned earlier, even to read this post you must be able to decrypt the data, which means you must perform an exchange.

    只要有接收者,每种加密算法都需要密钥交换。 亲自交出钥匙是安全的,但并不总是可行的。 例如, NIST仅通过美国邮件或FAX交付密钥 。 如前所述,即使要阅读这篇文章,您也必须能够解密数据,这意味着您必须执行交换。

    Image for post
    Illustration of the idea of the Diffie-Hellman key exchange. Diffie-Hellman密钥交换的想法的插图。

    Without encryption, your data is not secure. Exchanging keys requires an unencrypted channel, yet other people listening should not be able to acquire the secret key. Diffie–Hellman key exchange comes into play here. Using Diffie-Hellman it is possible to share secret keys using an insecure channel.

    没有加密,您的数据将不安全。 交换密钥需要未加密的通道,但是其他正在收听的人也将无法获取该密钥。 Diffie-Hellman密钥交换 在这里发挥作用。 使用Diffie-Hellman,可以使用不安全的通道共享秘密密钥。

    Here’s how it works:


    1. Two participants (Alice and Bob) agree to use a public key (Key B). Any eavesdropper can see this key.

      两个参与者(爱丽丝和鲍勃)同意使用公共密钥(密钥B)。 任何窃听者都可以看到此密钥。
    2. They both create their own private key. Alice creates Key A and Bob creates key B.

      它们都创建自己的私钥。 爱丽丝创建密钥A,鲍勃创建密钥B。
    3. They combine their private key with the public key (Key P) and then sends it over. Alice sends AP, while Bob sends BP.

      他们将其私钥与公钥(密钥P)结合在一起,然后将其发送出去。 爱丽丝发送AP,鲍勃发送BP。
    4. Each participant combines the key they have received with their own private key. This results in each participant having the same key, a combination of A, P, and B. The eavesdroppers can only see AP, BP, and P, so they cannot create APB.

      每个参与者将自己收到的密钥与自己的私钥结合在一起。 这导致每个参与者具有相同的密钥,即A,P和B的组合。窃听者只能看到AP,BP和P,因此他们无法创建APB。

    Diffie-Hellman Wikipedia page has a mathematical explanation.

    Diffie-Hellman Wikipedia页面具有数学解释。

    Computerphile has a great video on Diffie-Hellman with visualization.

    翻译自: https://blog.mono.net.tr/basics-of-encryption-and-hashing-b9d925672c46


  • 如今已有很多标准的算法比如SHA或者MD5再结合salt(盐)使用是一个不错的选择。 废话不多说!直接开始 SpringBoot 中提供了Spring Security: BCryptPasswordEncoder类,实现Spring的PasswordEncoder接口使用BCrypt...

    SpringBoot 中提供了Spring Security:



    注意:Spring Security 它默认的是拦截所有路径,但是只是需要它的加密算法,所以我们要添加一个配置类,让所有地址可以匿名访问

    Spring Security 安全配置类 *.config

    import org.springframework.context.annotation.Configuration;
    import org.springframework.security.config.annotation.web.builders.HttpSecurity;
    import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
    import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
     * Spring Security安全配置类
    public class WebSecurityConfig extends WebSecurityConfigurerAdapter{
        protected void configure(HttpSecurity http) throws Exception {
             * authorizeRequests() 是所有security全注解配置实现的开端,表示开始说明需要的权限。
             * 需要的权限分两部分,第一部分是拦截的路径,第二部分访问该路径需要的权限。
             * antMatchers是表示拦截什么路径,permitAll()任何权限都可以访问,就是直接放行所有。
             * anyRequest()任何的请求,authenticated 认证后才能访问。
             * .and().csrf().disable(); 固定写法,表示使csrf拦击失效(csrf 是网络攻击技术。有想了解自己找资料)。

    在springboot 启动类中添加配置BCryptPasswordEncoder

    public BCryptPasswordEncoder bcryptPasswordEncoder(){
    	return new BCryptPasswordEncoder();

    如果没有配置 BCryptPasswordEncoder 也就是没有在容器中,springboot没法管理它

    我用的是spring全家桶开发的,所以操作数据库是:Spring Data Jpa

    @Autowired //注入BCryptPasswordEncoder
    BCryptPasswordEncoder encoder;
    public void deyadd(Admin admin) {
    	//密码加密 encoder.encode(需要加密的密码)
    	String newpassword = encoder.encode(admin.getPassword());//加密后的密码


    public Addmin deyPassword(String loginname, String password){
    	Addmin addmin = adminDao.findByLoginname(loginname);
    	//密码验证 encoder.matches(输入的密码,数据库中的密码)
    	if( addmin!=null && encoder.matches(password,admin.getPassword())){
    		return addmin;
    		return null;



  • 安全哈希加密

    2017-01-13 16:32:30

    #import "CommonCrypto/CommonDigest.h"//需要导入这个头文件

    + (NSString*)SHA1WithEncrypt:(NSString *)encrypt{
        const char *cstr = [encrypt cStringUsingEncoding:NSUTF8StringEncoding];
        NSData *data = [NSData dataWithBytes:cstr length:encrypt.length];
        uint8_t digest[CC_SHA1_DIGEST_LENGTH];
        CC_SHA1(data.bytes, (unsigned int)data.length, digest);
        NSMutableString* output = [NSMutableString stringWithCapacity:CC_SHA1_DIGEST_LENGTH * 2];
        for(int i = 0; i < CC_SHA1_DIGEST_LENGTH; i++)
            [output appendFormat:@"%02x", digest[i]];
        return output;

  • python 哈希加密算法的使用

    千次阅读 2018-08-01 11:05:37
    import hmac import hashlib import base64 def hmac_sha1(strContent):  h=hmac.new(skey.encode(),strContent.encode(),hashlib.sha1)  return base64.b64encode(h.digest()) def hmac_sha256(strContent)...
  • python哈希加密

    2019-04-04 10:18:19
    1 使用python进行哈希加密 import hashlib a = "123456" sha1 = hashlib.sha1() sha1.update(a) print(sha1.hexdigest) # 71dd07494c5ee54992a27746d547e25dee01bd97
  • 传统哈希加密算法实现,有代码参考,也可以作为工具使用
  • 在filecoin中不管是数据的切片上传还是数据的寻找下载都绕不开一个词——哈希加密。那么哈希加密到底是什么呢?它的计算逻辑是什么?而Filecoin中又为什么选择了哈希算法呢? 什么是哈希加密哈希加密其实是哈希...
  • C# 哈希加密

    2017-04-26 10:13:15
    using System; using System.Text; using System.Security.Cryptography; namespace DotNet.... /// 得到随机安全码(哈希加密)。 /// public class HashEncode { public HashEncode() { // // TODO
  • 这个C#类封装了一些hash加密的功能,可以用于得到随机哈希加密字符串使用非常方便 using System; using System.Text; using System.Security.Cryptography; namespace DotNet.Utilities { /// /// 得到随机安全...
  • C# 哈希加密字符串

    2019-04-28 12:41:38
    /// <summary> /// 哈希加密一个字符串 /// </summary> /// <param name="Security"></param> /// <returns></returns> public static str...
  • 哈希加密算法种类

    2020-05-19 13:50:45
    MD5哈希加密算法 MD5即Message-Digest Algorithm 5(信息-摘要算法 5),用于确保信息传输完整一致。是计算机广泛使用的散列算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。 将数据(如汉字)...
  • MySQL数据库中的哈希加密

    千次阅读 2017-11-01 14:48:00
    数据库安全是数据库中最为重要的环节,只有确保了数据库中数据的安全,才能够更好的发挥数据库的功能,本文将为大家介绍一种很好的数据库加密方法,即哈希加密。   导读:MySQL数据库加密的方法有很多种...
  • 安全哈希加密算法实现,有代码参考,也可以作为工具使用
  • 明文存储:肉眼就可以识别,没有任何安全性。... 加盐哈希加密:加密时混入一段“随机”字符串(盐值)再进行哈希加密。即使密码相同,如果盐值不同,那么哈希值也是不一样的。现在网站开发中主要是运用这种加密方法。
  • 2 BCryptPasswordEncoder(基于BCrypt的强散列哈希加密) 基于BCrypt的强散列哈希加密实现,并可以由客户端指定加密的强度strength,强度越高安全性自然就越高,默认为10. Spring Security设置加密方式。 /** * ...
  • 如何恰当的使用哈希加密账户密码

    千次阅读 2017-03-08 21:05:04
    加盐哈希,盐值应该使用基于加密的伪随机数生成器(Cryptographically Secure Pseudo-Random Number Generator – CSPRNG)来生成。CSPRNG和普通的随机数生成器有很大不同,如C语言中的rand()函数。物如其名,...
  • 在所有的加密算法中使用最多的就是哈希加密了,很多人第一次接触的加密算法如MD5、SHA1都是典型的哈希加密算法,而哈希加密除了用在密码加密上,它还有很多的用途,如提取内容摘要、生成签名、文件对比、区块链等等...
  • 哈希加密方式判别器

    2015-08-06 18:09:16
  • 哈希加密---bcrypt

    2020-04-13 17:54:51
    哈希加密为单程加密方式(1234=>abcd),加密的密码中加入随机字符串可增加密码被破解的难度; bcrypt依赖其他环境 1.python 2.x; 2.node-gyp (npm install node-gyp -g) 3.windows-build-tools(npm install --...
  • Nettle.jl:围绕荨麻加密哈希加密库的Julia包装程序,提供MD5,SHA1,SHA2哈希和HMAC功能以及AES加密解密
  • IOS md5 和 sha哈希加密

    千次阅读 2014-09-01 10:44:53
    md5 和 sha哈希加密,用到ios7 里面自带的方法,不需要加库! 代码如下
  • 简介 几种破解哈希加密的方法

    万次阅读 2018-03-09 14:23:22
    破解哈希加密: 破解哈希加密最简单的办法,就是去猜,将每个猜测值哈希之后的结果和目标值比对,如果相同则破解成功 我们没有办法阻止字典攻击和暴击攻击,尽管可以降低它们的效率,但那也不是完全阻止。如果你的...
  • PHP5.5-哈希加密和匹配

    2017-08-11 17:41:30
    哈希加密从php5.5开始支持,相比MD5加密更安全,不可逆;使用方法如下: /* * 使用 password_hash($password,PASSWORD_DEFAULT)加密 * 使用 password_verify($password,$hash) 判断是否匹配 */ $secret = '...
  • MVC 密码加密(哈希加密

    千次阅读 2013-03-21 16:49:39
    //返回指定密码的 RFC 2898 哈希值  string PassWord = Crypto.HashPassword("123456");... //确定指定的 RFC 2898 哈希和密码是否为加密匹配。  bool bo = Crypto.VerifyHashedPassword(PassWord, "123456");



1 2 3 4 5 ... 20
收藏数 63,981
精华内容 25,592