从java转golang也半年了,在公司一直做得是数据接口的业务,会接触到各种加密,最常用的就是rsa、md5、sha256这三种了,md5加密每个语言都大同小异,今天没事来记录一下。大佬勿喷。
RSA加解密
**
公钥加密-分段
*/
func RsaEncryptBlock(src, publicKeyByte []byte) (bytesEncrypt []byte, err error) {
block, _ := pem.Decode(publicKeyByte)
if block == nil {
return nil, errors.New("获取公钥失败")
}
publicKey, err := x509.ParsePKIXPublicKey(block.Bytes)
if err != nil {
return
}
keySize, srcSize := publicKey.(*rsa.PublicKey).Size(), len(src)
pub := publicKey.(*rsa.PublicKey)
//logs.Debug("密钥长度:", keySize, "\t明文长度:\t", srcSize)
//单次加密的长度需要减掉padding的长度,PKCS1为11
offSet, once := 0, keySize-11
buffer := bytes.Buffer{
}
for offSet < srcSize {
endIndex := offSet + once
if endIndex > srcSize {
endIndex = srcSize
}
// 加密一部分
bytesOnce, err := rsa.EncryptPKCS1v15(myrand.Reader, pub, src[offSet:endIndex])
if err != nil {
return nil, err
}
buffer.Write(bytesOnce)
offSet