椭圆曲线加密__http://blog.51cto.com/11821908/2057726
// MyRas.go
package main import (
"crypto/rand"
"crypto/rsa"
"crypto/x509"
"encoding/pem"
"fmt"
"os"
) func main() {
//加密
src := []byte("少壮不努力,活该你单身,223333")
fmt.Println("非对称加密解密数据", src)
date, err := EnRsaPublic("PublicKey.pem", src)
if err != nil {
panic(err)
}
date, err = DeRsaPrivate(date, "PriveteKey.pem")
if err != nil {
panic(err)
}
fmt.Println("非对称加密解密结果", string(date))
} /*
生成私钥操作流程
1.使用rsa中GenerateKey方法生成私钥
2.通过x509标准将得到的rsa私钥序列化为ASN.1的DER编码字符串
3.将私钥字符串设置到pem格式块中
4.通过pem将设置好的数据进行编码,并写入磁盘文件中
生成公钥操作流程
1.从得到的私钥对象中将公钥信息取出
2.通过x509标准将得到的rsa公钥序列化为ASN.1的DER编码字符串
3.将公钥字符串设置到pem格式块中
4.通过pem将设置好的数据进行编码,并写入磁盘文件中
*/ func GeneRsa(blockSize int) error {
PrivateKey, err := rsa.GenerateKey(rand.Reader, blockSize)
if err != nil {
return err
}
stream := x509.MarshalPKCS1PrivateKey(PrivateKey)
block := pem.Block{
Type: "RSA PrivateKey",
Bytes: stream,
}
PrivateFile, err := os.Create("PriveteKey.pem")
if err != nil {
return err
}
err = pem.Encode(PrivateFile, &block) PublicKey := PrivateKey.PublicKey stream1, err := x509.MarshalPKIXPublicKey(&PublicKey)
if err != nil {
return err
} block1 := pem.Block{
Type: "RSA PublicKey",
Bytes: stream1,
}
PublicFile, err := os.Create("PublicKey.pem")
if err != nil {
return err
}
err = pem.Encode(PublicFile, &block1)
return err
} /*
公钥加密
1.将公钥取出得到PEM编码的字符串
2.将得到的字符串进行pem解码
3.使用x509进行解析公钥
4.使用Rsa对公钥进行加密
私钥解密
1.将私钥取出得到PEM编码的字符串
2.将得到的字符串进行pem解码
3.使用x509进行解析私钥
4.对私钥使用rsa进行解密
*/
func EnRsaPublic(filePath string, src []byte) ([]byte, error) {
file, err := os.Open(filePath)
msg := []byte(" ")
if err != nil {
return msg, err
}
//(file *File) Stat() (FileInfo, error)
info, err := file.Stat()
//type FileInfo interface
if err != nil {
return msg, err
}
byteSize := make([]byte, info.Size())
//(f *File) Read(b []byte) (n int, err error) Read方法从f中读取最多len(b)字节数据并写入b
file.Read(byteSize)
//Decode(data []byte) (p *Block, rest []byte)
block, _ := pem.Decode(byteSize)
//type Block struct
//ParsePKIXPublicKey(derBytes []byte) (pub interface{}, err)
pubinter, err := x509.ParsePKIXPublicKey(block.Bytes)
if err != nil {
return msg, err
}
pubKey := pubinter.(*rsa.PublicKey)
//EncryptPKCS1v15(rand io.Reader, pub *PublicKey, msg []byte)
msg, err = rsa.EncryptPKCS1v15(rand.Reader, pubKey, src)
if err != nil {
return msg, err
}
return msg, nil } func DeRsaPrivate(src []byte, filePath string) ([]byte, error) {
file, err := os.Open(filePath)
msg := []byte(" ")
if err != nil {
return msg, err
}
//(file *File) Stat() (FileInfo, error)
info, err := file.Stat()
//type FileInfo interface
if err != nil {
return msg, err
}
byteSize := make([]byte, info.Size())
//(f *File) Read(b []byte) (n int, err error) //Read方法从f中读取最多len(b)字节数据并写入b
file.Read(byteSize) block, _ := pem.Decode(byteSize) priKey, err := x509.ParsePKCS1PrivateKey(block.Bytes)
if err != nil {
return msg, err
}
msg, err = rsa.DecryptPKCS1v15(rand.Reader, priKey, src)
if err != nil {
return msg, err
}
return msg, nil }
/*
非对称加密解密数据 少壮不努力,活该你单身,223333
非对称加密解密结果 少壮不努力,活该你单身,223333
*/

go加密算法:非对称加密(一)--RSA的更多相关文章

  1. 加密算法(对称加密)AES、DES (非对称加密)RSA、DSA

    目前主流的加密方式有:(对称加密)AES.DES        (非对称加密)RSA.DSA

  2. 非对称加密技术- RSA算法数学原理分析

    非对称加密技术,在现在网络中,有非常广泛应用.加密技术更是数字货币的基础. 所谓非对称,就是指该算法需要一对密钥,使用其中一个(公钥)加密,则需要用另一个(私钥)才能解密. 但是对于其原理大部分同学应 ...

  3. openssl 非对称加密DSA,RSA区别与使用介绍(转)

    openssl 非对称加密DSA,RSA区别与使用介绍(转) 博客分类: OS.Linux Security   在日常系统管理工作中,需要作一些加解密的工作,通过openssl工具包就能完成我们很多 ...

  4. 浅谈IM软件业务知识——非对称加密,RSA算法,数字签名,公钥,私钥

    概述 首先了解一下相关概念:RSA算法:1977年由Ron Rivest.Adi Shamirh和LenAdleman发明的.RSA就是取自他们三个人的名字. 算法基于一个数论:将两个大素数相乘很ea ...

  5. 使用java实现对称加密解密(AES),非对称加密解密(RSA)

    对称加密:双方采用同样的秘钥进行加密和解密.特点是速度快,但是安全性没有非对称加密高 非对称加密:接收方生成的公有秘钥公布给发送方,发送方使用该公有秘钥加密之后,发送给接收方,然后接收方使用私有秘钥解 ...

  6. openssl 非对称加密DSA,RSA区别与使用介绍

    在日常系统管理工作中,需要作一些加解密的工作,通过openssl工具包就能完成我们很多需求! 1. openssl RSA 加解密 RSA是基于数论中大素数的乘积难分解理论上的非对称加密法,使用公私钥 ...

  7. go加密算法:非对称加密(三)--Elliptic

    看了2星期的区块链原理与运行机制,加密这里开始变得有些生疏,花了一天时间复习了一些;看到了之前忽略的,也学会了椭圆曲线加密. //基础板:浅显易懂package main import ( " ...

  8. go加密算法:非对称加密(二)--Hash

    关于一些加密算法的应用和信息,可以在以下博客中查找到: https://www.cnblogs.com/charlesblc/p/6130141.html // MyHash package main ...

  9. Asp.Net 常用工具类之加密——非对称加密RSA算法

    踏入程序员这个行业也有几年了,几年中有收获(技术加强),有付出(时间和亚健康状态).当然喏,并不后悔,代码路还长!!! On The Way,永不止步!!! 开发过程中也积累了一些自己的经验.代码块和 ...

随机推荐

  1. EF单实对应多表

    一.单实体对应多表 适用场景主表,拥有相同主键附属表或扩展表. 1. 建表词句 CREATE TABLE [Chapter2].[Product]( [SKU] [int] primary key , ...

  2. BASE64编码的字符进行URL传输丢失特殊字符的问题

    因为BASE64的编码里含有“+”号等特殊字符,在url传输的时候会把+号编程空格,解决这个问题的方法: 请求时把BASE64编码进行url的编码再进行传输 接收时把BASE64编码进行url的解码 ...

  3. Linux入门-2 VIM基础

    启动与退出 模式 进入插入模式 命令 删除.复制.粘贴 光标控制 查找与替换 EX模式 启动与退出 vim只启动vim vim <filename>打开文件,如果不存在则新建 模式 Nor ...

  4. Going Deeper with Convolutions(Inception v1)笔记

    目录 Abstract Introduction First of All Inception Depth Related Work Motivation and High Level Conside ...

  5. ESP32D0WDQ6 灯泡 黑客

    这个黑客表现得如何聪明 灯泡 可能泄漏您的Wi-Fi密码O网页链接破解者博客详文 Pwn the LIFX Mini white O网页链接ESP32D0WDQ6, a SoC from ESPRES ...

  6. Nginx配置虚拟机,url重写,防盗链

    配置目录: ·     虚拟主机 ·     PHP支持 ·     URL重写 ·     防止盗链 ·     持续更新… 一.虚拟主机 1.创建 文件格式:{域名}.conf 具体如下: $ s ...

  7. java 开发常用IDE

    1.IntelliJ IDEA 2.eclipse 3.netbeans 这三个IDE都不错,据说IntelliJ IDEA最好,主要还是看个人喜好和需要.

  8. Vue.js经典开源项目汇总

    Vue.js经典开源项目汇总 原文链接:http://www.cnblogs.com/huyong/p/6517949.html Vue是什么? Vue.js(读音 /vjuː/, 类似于 view) ...

  9. redis在windows平台安装和启动

    官网: https://redis.io/ 中文网站:http://www.redis.net.cn/ 一.下载windows版本的redis 官网没有提供windows版本的下载,只有linux版本 ...

  10. 关于Jsp页面的jstl标签的级联属性的异常。

    使用SpringMVC框架时,当我做表单回显时. 情景描述.Employee 类有一个Department类的属性.这两个类存在多对一关联关系. 下面是Employee类的属性的定义. public ...