前言加解密在实际开发中应用广泛。常用的加密和解密分为:“对称”、“非对称”和“数字签名”。Symmetric:对称加密(也称私钥加密)是指加密和解密使用相同密钥的加密算法。具体算法主要有DES算法、3DES算法、TDEA算法、Blowfish算法、RC5算法、IDEA算法。非对称加密(公钥加密):是指加密和解密使用不同密钥的加密算法,又称公私钥加密。具体算法主要有RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)。数字签名:数字签名是非对称密钥加密技术和数字抽象技术的应用。主要算法有md5、hmac、sha1等,下面介绍golang语言主要加解密算法的实现。md5MD5信息摘要算法是一种应用广泛的密码哈希函数,可以产生一个128位(十六进制,32个字符)的哈希值(hashvalue),保证信息传输的完整性和一致性。funcGetMd5String(sstring)string{h:=md5.New()h.Write([]byte(s))returnhex.EncodeToString(h.Sum(nil))}hmacHMAC是key相关的哈希运算消息认证码(Hash-basedMessageAuthenticationCode),它在计算散列时使用标准算法将密钥混合到计算过程中。与我们自定义的salt算法不同,Hmac算法对所有哈希算法都是通用的,无论是MD5还是SHA-1。使用Hmac来代替我们自己的salt算法可以让程序算法更加规范和安全。Example//keysetdata随意加密数据funcHmac(key,datastring)string{hash:=hmac.New(md5.New,[]byte(key))//创建对应的md5hash加密算法hash.Write([]byte(data))returnhex.EncodeToString(hash.Sum([]byte("")))}funcHmacSha256(key,datastring)string{hash:=hmac.New(sha256.New,[]byte(key))//创建对应的sha256hash加密算法hash.Write([]byte(data))returnhex.EncodeToString(hash.Sum([]byte("")))}sha1SHA-1可以生成一个消息,叫做A160-摘要的位(20字节)散列,通常表示为40个十六进制数字。funcSha1(datastring)string{sha1:=sha1.New()sha1.Write([]byte(data))returnhex.EncodeToString(sha1.Sum([]byte("")))}AES密码学中的高级加密AdvancedEncryption标准(AES),也称为Rijndael加密,是美国联邦政府采用的一种块加密标准。该标准用于替代原来的DES(DataEncryptionStandard),经过多方分析,在世界范围内得到广泛应用。AES中共有三种常见的解决方案,分别是AES-128、AES-192和AES-256。使用真正的128位加密甚至256位加密,暴力攻击将需要相当长的时间才能成功。AES有五种加密模式:ElectronicCodebookBook(ECB),CipherBlockChaining(CBC),Counter(CTR),CipherFeedBack(CFB))OutputFeedBack(OFB)ECB模式为了安全起见,golang默认不支持ECB模式.packagemainimport("crypto/aes""fmt")funcAESEncrypt(src[]byte,key[]byte)(encrypted[]byte){cipher,_:=aes.NewCipher(generateKey(key))length:=(len(src)+aes.BlockSize)/aes.BlockSizeplain:=make([]byte,length*aes.BlockSize)copy(plain,src)pad:=byte(len(plain)-len(src))fori:=len(src);i
