• Golang数据安全与常用加解密算法哈希算法


    基本特征

    • 输入可以是任意长度
    • 输出是固定长度
    • 根据输入很容易计算出输出【单向性】
    • 根据输出很难计算出输入(几乎不可能)
    • 两个不同的输入几乎不可能得到相同的输出【唯一性】

    sha1

    SHA(Secure Hash Algorithm) 安全散列算法,是一系列密码散列函数,有多个不同安全等级的版本:SHA-1,SHA-224,SHA-256,SHA-384,SHA-512

    防伪装,防窜扰,保证信息的合法性和完整性

    示例代码:

    package main
    
    import (
    	"crypto/sha1"
    	"encoding/hex"
    	"fmt"
    )
    
    func Sha1(data string) string {
    	hash := sha1.New()
    	hash.Write([]byte(data))
    	return hex.EncodeToString(hash.Sum([]byte("")))
    }
    
    func main() {
    	data := "因为我们没有什么不同"
    	fmt.Printf("SHA-1: %s\n", Sha1(data))
    }
    
    
    >>>>>>>>>>output
    SHA-1: 0cfea402af137e3793a6c8a80152b5ab74ba380b
    

    sha-1加密过程

    • 填充补零,使得数据长度对512求余的结果为448
    • 在信息摘要后面附加64bit,表示原始信息摘要的长度
    • 初始化h0到h4,每个h都是32位
    • h0到h4历经80轮复杂的变换
    • 把h0到h4拼接起来,构成160位,返回

    SHA-1伪代码

    md5

    MD5(Message-Digest Algorithm 5)信息-摘要算法5,算法流程跟SHA-1大体相似

    • MD5的输出是128位,比SHA-1短了32位

    • MD5相对易受密码分析的攻击,运算速度比SHA-1快

    示例代码:

    package main
    
    import (
    	"crypto/md5"
    	"encoding/hex"
    	"fmt"
    )
    
    func Md5(data string) string {
    	hash := md5.New()
    	hash.Write([]byte(data))
    	return hex.EncodeToString(hash.Sum([]byte("")))
    }
    
    func main() {
    	data := "因为我们没有什么不同"
    	fmt.Printf("MD5: %s\n", Md5(data))
    }
    
    
    >>>>>>>>>>output
    MD5: 78cfcd6021c4f04e7e709cb8148aa4dd
    

    应用

    • 用户密码的存储
    • 文件上传/下载完整性校验
    • mysql大字段的快速对比
  • 相关阅读:
    第02组 Beta冲刺(1/4)
    第02组 Alpha事后诸葛亮
    第02组 Alpha冲刺(4/4)
    第02组 Alpha冲刺(3/4)
    团队作业6——复审与事后分析(集合贴)
    事后诸葛亮分析报告
    Alpha阶段项目复审
    团队作业5——测试与发布(Alpha版本)
    团队作业四——七天的敏捷冲刺日志集合贴
    第 7 篇 Scrum 冲刺博客
  • 原文地址:https://www.cnblogs.com/remixnameless/p/15898777.html
Copyright © 2020-2023  润新知