![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
密码学
磨镜台
牢骚太盛防肠断,风物长宜放眼量。
展开
-
对称密码算法简介
对称密码算法DES(DataEncryptionStandard):基本不用了不安全秘钥长度:8字节(64bit,每7位提供一个校验位)对文件进行分组进行切割,每组8个字节大小分组后不足8字节怎么办3DES:进行3次des :加密(密钥1) 解密(密钥2)加密(密钥3)。解密是逆过程。或者:解密(密钥1) 加密(密钥2) 解密(密钥3)以解密为加密手段,目的为了和DES兼容...原创 2019-06-23 19:55:12 · 2238 阅读 · 1 评论 -
数字签名
数字签名签名过程对内容做哈希使用私钥对哈希签名将源文件和签名一起发送验证过程对内容做哈希,得到哈希1使用公钥对签名进行校验,得到哈希2比较哈希1和哈希2go实现签名过程:func RsaSignData(filename string, src []byte) ([]byte, error) { //读取私钥 priKey, err := readRsaPriK...原创 2019-06-24 20:08:13 · 132 阅读 · 0 评论 -
消息认证码
消息认证码保证完整性消息认证码认证过程消息认证码认证步骤例子消息认证码问题依然存在密钥分发问题无法防止否认:(双发都有密钥,都可以否认自己发过某个消息)无法进行第三方证明所以引出了非对称加密的数字签名非对称加密的数字签名不需要发送私钥私钥自己持有,无法否认可以进行第三方证明,使用公钥可以帮忙认证...原创 2019-06-24 20:06:49 · 500 阅读 · 0 评论 -
哈希
哈希任意长度的输入得到定长的输出特点唯一性抗碰撞(基数很大)不可逆使用场景随机口令防止篡改:消息认证码,数字签名密码存储:数据库存密码go使用哈希算法md5:生成128位(16字节)长度的哈希值适合场景:不断接收新数据,往hasher中写入func myMD5(src []byte) ([]byte, error) { //创建一个哈希接口 //可以向接口写数...原创 2019-06-24 20:04:44 · 392 阅读 · 1 评论 -
golang实现RSA加密解密
golang实现RSA加密解密公钥加密过程得到公钥加密//加密func RsaEncryptData(filename string, src []byte)([]byte, error) { //获取公钥 pubKey, err := readRsaPubKey(filename) if err != nil { return nil, err } //加密 en...原创 2019-06-24 20:03:42 · 763 阅读 · 1 评论 -
非对称密码算法简介
RSA利用大素数的因式分解困难# E和N是公钥密文=明文^E mod N (RSA加密) # D和N私钥明文=密文^D mod N (RSA加密) 例子令p=3,q=11,得出n=p×q=3×11=33f(n)=(p-1)(q-1)=2×10=20取e=3,(3与20互质)则e×d≡1 mod f(n),即3×d mod 20 = 1 mod 20。通过试算d=7素数(...原创 2019-06-23 21:10:53 · 703 阅读 · 1 评论 -
base64编解码
base64编解码对二进制数据进行处理,每3个字节一组,一共是3x8=24bit。然后将24bit重新划为4组,每组正好6个bit。base64编码不是加解密,一种数据的格式,方便传输。两个系统可能有不同的字符,把特殊的字符编译文本,传输过去。把一些特殊字符做处理,正常传输。base64标准字母表A-Za-z0-9 + /不足3字节倍数的情况go中bas...原创 2019-06-23 20:40:04 · 1310 阅读 · 1 评论 -
生成公钥私钥
公私钥生成过程选定一个随机数->生成私钥->生成公钥公私钥用途用于传输数据。公钥加密,私钥解密。用于证书。私钥签名,公钥解签名。用于https用于ssh登录创建公私钥私钥生成创建私钥对私钥进行编码,生成der格式的字符串将der字符串拼接到pem格式的数据块中pem格式进行base64编码,得到最终的私钥func GenerateRsaKeyPair...原创 2019-06-23 20:13:52 · 1235 阅读 · 1 评论 -
go实现DES+CBC
go实现DES+CBCDES密钥长度:8字节CBC分组长度要与算法密钥长度相同//加密func desCBCEncrypt(plainText []byte, key []byte) ([]byte, error) { //TODO //创建des接口 block, err := des.NewCipher(key) if err != nil { return nil ,...原创 2019-06-23 20:00:19 · 467 阅读 · 1 评论 -
go实现AES+CTR
go实现AES+CTR加密算法:aes密钥:16分组长度:16分组模式:ctr不需要填充package mainimport ( "bytes" "crypto/aes" "crypto/cipher" "fmt")//加密func aesCtrEncrypt(plainText []byte, key []byte) ([]byte, error) { //TOD...原创 2019-06-23 19:57:42 · 1394 阅读 · 1 评论 -
证书和HTTPS
证书和HTTPShttp:应用层协议,标准协议https:不是标准协议,http +ssl(security socket layer)例如访问百度访问百度时,如何认证百度,需要CA机构帮忙认证百度在本地生成公私钥将公钥发给CA机构CA对百度的公钥进行处理,生成百度数字证书,返回给百度。客户访问百度,百度发送给客户证书。客户认证证书是否有效如果证书有效,生成对称密钥,使用服务...原创 2019-06-24 20:14:21 · 134 阅读 · 1 评论