go语言crypto go语言入门

golang x509的Certificate.Verify函数周末在家无趣 , 研究了一个golang里面的Certificate.Verify函数 。
golang的官方定义在这里:
函数原型声明如下:
func (cCertificate) Verify(opts VerifyOptions) (chains [][] Certificate, err error)
其中:
这个函数的功能是:
Verify attempts to verify c by building one or more chains from c to a certificate in opts.Roots, using certificates in opts.Intermediates if needed. If successful, it returns one or more chains where the first element of the chain is c and the last element is from opts.Roots.
If opts.Roots is nil and system roots are unavailable the returned error will be of type SystemRootsError.
解释一下就是:
举一个例子:
假设存在证书链签出关系:C1 - C2 - C3 - C4,即C1签出C2 , C2签出C3,C3签出C4;现在使用函数:
我们根据Intermediates和Roots的值不同,比较输出结果:
golang中crypto/hmac包hmac包实现go语言crypto了U.S.Federal Infomation Processing Standards Publication 198规定go语言crypto的HMAC(加密哈希信息认证码) 。
HMAC是使用key标记信息的加密hash 。接收者使用相同的key逆运算来认证hash 。
出于安全目的go语言crypto,接收者应使用Equal函数比较认证码:
这个包一共提供了两个对外公开的函数:
func Equal(mac1, mac2 []byte) bool
比较两个MAC是否相同go语言crypto,而不会泄露对比时间信息 。(以规避时间侧信道攻击;指通过计算比较时花费的时间的长短来获取密码的信息go语言crypto,用于密码破解)
func New(h func() hash.Hash, key []byte) hash.Hash
New函数返回一个采用hash.Hash作为底层hash接口、key作为密钥的HMAC算法的hash接口 。
golang SSH客户端三件套 - 1远程连接 shell golang SSH客户端系列文章目录
SSH(Secure Shell)协议在远程登录时比较常用,但是除此之外还有一些其它的功能也很好用,比如端口映射,X11转发,sftp文件传输等 。
以下三篇文章将介绍golang版SSH的远程登录功能,端口映射功能及sftp文件传输功能 。X11包含GUI的一些操作 , 没有找到相关的包,故不做介绍
通过golang自带的ssh包 golang.org/x/crypto/ssh 可以实现远程登录功能,默认是不支持tab键和上下箭头的,
通过导入golang.org/x/crypto/ssh/terminal来创建VT100终端可以支持tab等功能,让golang版本的ssh客户端体验和平时用的其它客户端差不多 。
如何使用Go语言实现远程执行命令一般命令
所谓一般命令,就是在一定时间内会执行完的命令 。比如 grep, cat 等等 。执行命令的步骤是:连接 , 执行,获取结果
连接
连接包含go语言crypto了认证,可以使用 password 或者 sshkey 2种方式来认证 。下面的示例为go语言crypto了简单,使用go语言crypto了密码认证的方式来完成连接 。
import (
"fmt"
"time"
"golang.org/x/crypto/ssh"
)
func connect(user, password, host string, port int) (*ssh.Session, error) {
var (
auth[]ssh.AuthMethod
addrstring
clientConfig *ssh.ClientConfig
client *ssh.Client
session *ssh.Session
errerror
)
// get auth method
auth = make([]ssh.AuthMethod, 0)
auth = append(auth, ssh.Password(password))
【go语言crypto go语言入门】clientConfig = ssh.ClientConfig{
User: user,
Auth: auth,
Timeout: 30 * time.Second,
}
// connet to ssh
addr = fmt.Sprintf("%s:%d", host, port)
if client, err = ssh.Dial("tcp", addr, clientConfig); err != nil {
return nil, err
}
// create session
if session, err = client.NewSession(); err != nil {
return nil, err

推荐阅读