zoukankan      html  css  js  c++  java
  • [系列] Go

    签名验证是为了保证接口安全和识别调用方身份,同时还需要满足以下几点:

    • 可变性:每次的签名必须是不一样的。
    • 时效性:每次请求的时效性,过期作废。
    • 唯一性:每次的签名是唯一的。
    • 完整性:能够对传入数据进行验证,防止篡改。

    签名规则大同小异,根据自己的业务情况进行制定即可。

    签名过程中我们会用到的几种算法,接下来分享一下每个算法的基准测试,可能会存在误差,供大家参考。

    MD5 单向散列加密

    func BenchmarkEncrypt(b *testing.B) {
    	b.ResetTimer()
    	for i := 0; i < b.N; i++ {
    		New().Encrypt("123456")
    	}
    }
    
    // 输出
    goos: darwin
    goarch: amd64
    pkg: github.com/xinliangnote/go-gin-api/pkg/md5
    BenchmarkEncrypt-12    	10000000	       238 ns/op
    PASS
    

    AES 对称加密

    func BenchmarkEncryptAndDecrypt(b *testing.B) {
    	b.ResetTimer()
    	aes := New(key, iv)
    	for i := 0; i < b.N; i++ {
    		encryptString, _ := aes.Encrypt("123456")
    		aes.Decrypt(encryptString)
    	}
    }
    
    // 输出
    goos: darwin
    goarch: amd64
    pkg: github.com/xinliangnote/go-gin-api/pkg/aes
    BenchmarkEncryptAndDecrypt-12    	 1000000	      1009 ns/op
    PASS
    

    RSA 非对称加密

    func BenchmarkEncryptAndDecrypt(b *testing.B) {
    	b.ResetTimer()
    	rsaPublic := NewPublic(publicKey)
    	rsaPrivate := NewPrivate(privateKey)
    	for i := 0; i < b.N; i++ {
    		encryptString, _ := rsaPublic.Encrypt("123456")
    		rsaPrivate.Decrypt(encryptString)
    	}
    }
    
    // 输出
    goos: darwin
    goarch: amd64
    pkg: github.com/xinliangnote/go-gin-api/pkg/rsa
    BenchmarkEncryptAndDecrypt-12    	    1000	   1345384 ns/op
    PASS
    

    最后

    JWT 的签名验证也使用过,分享一下 JWT 的基准测试,使用的是 jwt.SigningMethodHS256 方法。

    func BenchmarkSignAndParse(b *testing.B) {
    	b.ResetTimer()
    	token := New(secret)
    	for i := 0; i < b.N; i++ {
    		tokenString, _ := token.Sign(123456789, "xinliangnote")
    		token.Parse(tokenString)
    	}
    }
    
    // 输出
    goos: darwin
    goarch: amd64
    pkg: github.com/xinliangnote/go-gin-api/pkg/token
    BenchmarkSignAndParse-12    	  200000	     11749 ns/op
    PASS
    

    以上代码在 go-gin-api 项目中,地址:github.com/xinliangnote/go-gin-api

  • 相关阅读:
    前进的道路,不要往后看——记得24生日
    【剑指offer】:Q44:直扑克
    手游client思考框架
    Craig可能是个冲浪爱好者
    VMware vSphere服务器虚拟化实验六 vCenter Server 添加储存
    OSX: 使用命令行对FileVault2分区恢复
    让工程师爱上CMMI,实现管理于无形 --- 中标软件CMMI L5之路 (1/2)
    让工程师爱上CMM,实现管理于无形 --- 中标软件CMMI L5之路 (2/2)
    HTML+CSS实例——漂亮的查询部件(一)
    jbpm部署流程定义到MySql报乱码解决方案
  • 原文地址:https://www.cnblogs.com/xinliangcoder/p/14259997.html
Copyright © 2011-2022 走看看