非对称加密之ECC椭圆曲线(go语言实践) 椭圆曲线密码学(英语:Elliptic curve cryptographygo语言rsa公钥加密 , 缩写为 ECC) , 一种建立公开密钥加密的算法,基于椭圆曲线数学 。椭圆曲线在密码学中的使用是在1985年由Neal Koblitz和Victor Miller分别独立提出的 。
ECC的主要优势是在某些情况下它比其go语言rsa公钥加密他的方法使用更小的密钥——比如RSA加密算法——提供相当的或更高等级的安全 。
椭圆曲线密码学的许多形式有稍微的不同,所有的都依赖于被广泛承认的解决椭圆曲线离散对数问题的 困难性上 。与传统的基于大质数因子分解困难性的加密方法不同,ECC通过椭圆曲线方程式的性质产生密钥 。
ECC 164位的密钥产生的一个安全级相当于RSA 1024位密钥提供的保密强度,而且计算量较小 , 处理速度 更快,存储空间和传输带宽占用较少 。目前go语言rsa公钥加密我国居民二代身份证正在使用 256 位的椭圆曲线密码,虚拟 货币比特币也选择ECC作为加密算法 。
具体算法详解参考:
怎么用 GO 实现 RSA 的私钥加密公钥解密func ReadBytes(path string) ([]byte, error) {
f, err := os.Open(path)
if err != nil {
return nil, err
}
defer f.Close()
【go语言rsa公钥加密 golang rsa加密】return ioutil.ReadAll(f)
}
func RSAEncrypt(data []byte) ([]byte, error) {
publicKey, err := ReadBytes(`public.pem`)
if err != nil {
return nil, err
}
block, _ := pem.Decode(publicKey)
if block == nil {
return nil, errors.New("public key error")
}
pubInterface, err := x509.ParsePKIXPublicKey(block.Bytes)
if err != nil {
return nil, err
}
return rsa.EncryptPKCS1v15(rand.Reader, pubInterface.(*rsa.PublicKey), data)
}
func RSADecrypt(data []byte) ([]byte, error) {
privateKey, err := ReadBytes(`private.pem`)
if err != nil {
return nil, err
}
block, _ := pem.Decode(privateKey)
if block == nil {
return nil, errors.New("private key error")
}
priv, err := x509.ParsePKCS1PrivateKey(block.Bytes)
if err != nil {
return nil, err
}
return rsa.DecryptPKCS1v15(rand.Reader, priv, data)
}
其中public.pem是公钥文件,private.pem是私钥文件 。
7 Go密码学(四) 非对称加密之RSA对称加密有非常好的安全性,其加解密计算的性能也较高 , 但其有两个重要缺点:
在如今开放的信息社会 , 秘钥的管理愈加困难,非公开的秘钥机制虽然破解较难,但还是有遭到攻击的可能性,由于对称加密需要加解密双方共同握有私钥,所有生成秘钥的一方必须分发给另一方才能进行安全通行,这就难免秘钥在网络中传输,网络是不可靠的,其有可能被拦截或篡改 。于是就产生了公开秘钥体制,即服务方根据特定算法产生一对钥匙串 , 自己持有私钥小心保存 , 而公钥公开分发 , 在通信中,由公钥加密进行网络传输,而传输的信息只能由私钥解密,这就解决了秘钥分发的问 。公开秘钥体制就是非对称加密,非对称加密一般有两种用途:
如今的非对称加密比较可靠的有RSA算法和ECC算法(椭圆曲线算法) , RSA的受众最多,但近年来随着比特币、区块链的兴起,ECC加密算法也越来越受到青睐 。下面我们先介绍一下RSA加密算法的使用,ECC我们下一讲展开 。
公钥密码体系都是要基于一个困难问题来保证其安全性的,RSA是基于大数分解 , 将一个即使是计算机也无能为力的数学问题作为安全壁垒是现代密码学的实现原理 。讲述这类数学问题需要庞杂的数论基?。?此相关部分在此不再展开,感兴趣的请出门右拐搜索欧几里得证明、欧拉函数等数论部分知识 。
推荐阅读
- javascript字符串引用,js字符串include
- 不用网络的云游戏推荐,不用网络的云游戏推荐
- 扬州小程序商城怎么做,扬州小程序制作公司
- linux命令密码修改 linux修改密码指令
- flutter强制竖屏软件,flutter 开屏
- chatgpt相关研报,chat研究
- vb.net如何关闭窗体 vb中关闭窗体的命令是
- 微信小程序违规通知怎么写,微信小程序因违规已暂停服务,怎么恢复
- 跳出安装华为移动服务器,跳出安装华为移动服务器的界面