首页
Python
Java
IOS
Andorid
NodeJS
JavaScript
HTML5
【
廖雪峰Java10加密与安全-2加密算法-1URL编码
】的更多相关文章
廖雪峰Java10加密与安全-2加密算法-1URL编码
1.URL编码 URL编码是浏览器发送数据给服务器时使用的编码. 如通过百度搜索美女: 编码前:https://www.baidu.com/s?wd=美女 编码后:https://www.baidu.com/s?wd=%E7%BE%8E%E5%A5%B3 URL编码规则: A-Z, a-z, 0-9以及-_.*保持不变 其他字符以%XX表示 * < -> %3C * (UTF-8: 0xe4b8ad) -> %E4%B8%AD * 空格有2种,一种是+(以前),另一种是%20(现在),目…
廖雪峰Java10加密与安全-2加密算法-2Base64编码
1.Base64编码 Base64一种把二进制数据用文本表示的编码算法.例如 中有3个字节{\xe4, \xb8, \xad},一共是24位,每6位分组,变成4个字节{39, 0b, 22, 2d},最终结果位5Lit. 如果长度不是3的整数倍: 末尾补0x00或0x00 0x00 * 编码后加=表示补充了1个字节 * 编码后加==表示补充了2个字节 Base64编码: 一种用文本(A-Z, a-z, 0-9, +/=)表示二进制内容的方式 适于用文本协议 效率下降.原因是2进制文件经过Base…
廖雪峰Java10加密与安全-4加密算法-5非对称加密算法
1.非对称加密 非对称加密就是加密和解密使用的不是相同的密钥 方法1: * 加密:用自己的私钥加密,然后发送给对方:encrypt(privateKeyA, message)->s * 解密:对方用自己的公钥解密:decrypt(publicKeyA, s)->message 方法2: * 加密:用对方的公钥加密,然后发送给对方:ecrypt(publicKeyB, message)->s * 解密:对方用自己的私钥解密:decrypt(privateKeyB, s) -> mes…
廖雪峰Java10加密与安全-4加密算法-4密钥交换算法
1DH算法 1.1.原根公式:g^i mod P 条件:1<g<P,0<i<P 原根:介于[1, p-1]之间的任意2个数i,j(p为素数,i≠j)的结果不相等,即 g^i mod p ≠ g^j mod p ,则g为p的原根. 同余式:正整数a,b对p取模,它们的余数相同,记做 或者a ≡ b (mod p) 示例:模为7 设a= 2,由于2^3=8≡1(mod 7),2^6=64≡1(mod7),2^3≡2^6(mod7),所以 2 不是模 7 的一个原根. 设a= 3,由于3…
廖雪峰Java10加密与安全-4加密算法-2口令加密算法
对称加密key是一个byte数组,如AES256算法的key是一个32字节的数组,普通的加密软件由用户输入加密口令.如果由用户输入口令,进行加密/解密,需要用到PBE算法. 1.PBE:Password Based Encryption 由用户输入口令,采用随机数杂凑计算出密钥再进行加密 Password:用户口令,例如"hello123" Salt:随机生成的byte[] Key:由随机的salt和password计算而成:generate(byte[] salt,String pa…
廖雪峰Java10加密与安全-4加密算法-1对称加密算法
1.对称加密算法 加密和解密使用同一个密钥,例如WinRAR. WinRAR在对文件进行打包的时候,可以设置一个密码,在解压的时候需要使用同样的密码才能正确的解压. 加密:encrypt(key,message) -> s 解密:decrypt(key,s) -> message 算法 密钥长度(决定加密的强度) 工作模式(参数) 填充模式(格式的选择) DES 56/64 ECB, CBC, PCBC, CTR... NoPadding, PKCS5Padding AES 128/192/2…
廖雪峰Java10加密与安全-6数字证书-1数字证书
数字证书: 非对称加密算法:对数据进行加密/解密 签名算法:确保数据完整性和抗否认性 摘要算法:确保证书本身没有被篡改…
廖雪峰Java10加密与安全-1数据安全-1加密与安全概念
数据安全 防窃听 防篡改 防伪造 古代加密方式: 移位密码:HELLO =>IFMMP 替代密码:HELLO=>p12,5,3 现代加密方式: 建立在严格的数学理论基础上 密码学逐渐发展成一门科学 总结: 设计一个安全的加密算法非常困难 验证一个加密算法是否安全更加困难 当前被认为安全的加密算法仅仅是迄今为止尚未被攻破 不要自己设计加密算法 不要自己实现加密算法 不要自己修改已有的加密算法…
廖雪峰Java10加密与安全-5签名算法-1RSA签名算法
1.数字签名 甲在发送加密消息的时候,还要发送自己的签名,而这个签名是用甲的privateKey计算的:而乙要验证这个签名是否是合法的,会用甲的publicKey去验证,如果验证成功,这个消息确实是甲发送的. 数字签名: 发送方用自己的私钥对消息进行签名:sig = signature(privateKey, "message") 接收方用发送方的公钥验证签名是否有效:boolean vaild = verify(publicKey, sig,"message").…
廖雪峰Java10加密与安全-3摘要算法-5Hmac
1 比较MD5和HamcMD5 HmacMD5可以看作带安全salt的MD5 import javax.crypto.KeyGenerator; import javax.crypto.Mac; import javax.crypto.SecretKey; import java.math.BigInteger; import java.security.MessageDigest; import java.security.Security; public class SplitString…