对称加密是一种只有唯一密钥才能解密的加密算法。 也就是说,解密和加密的密钥是相同的。
有通信双方知道密钥,才能解密。
发件人将明文和加密密钥一起特殊加密
算法处理,变成密文
发送。
对称加密算法用于加密敏感数据等信息,常见的算法如下。
1 :数据加密标准(des ) :数据加密标准,适用于高速加密大量数据。
2:3DES(tripledes )基于des,通过用三个不同的密钥对一个数据进行三次加密来提高强度。
4 )高级加密标准(AES ) :高级加密标准是新一代加密算法标准,它速度快,安全级别高。
对称加密算法的特点是算法公开,计算量小,加密速度快,加密效率高。
不足之处是:
1 )交易双方均使用同一密钥,安全性无保证。 回见。
2 )每次使用对称加密算法时,都需要使用别人不知道的唯一密钥,收发双方拥有的密钥数量呈几何级数增长,密钥管理成为用户的负担。
3 )对称加密算法难以在分布式网络系统中使用,主要是因为密钥管理困难
4 :使用成本高。 与公钥密码算法相比,对称密码算法能够提供加密和认证,但缺乏签名功能,使用范围较小。
在计算机专用网络系统中广泛使用的对称加密算法有DES和IDEA等。 美国国家标准局倡导的AES将取代DES作为新标准被采用。
对称加密算法的优点:加密速度快,使用长密钥时不易破解。 假设两个用户需要用对称加密方法加密并交换数据,则用户至少需要两个密钥来交换使用。 如果企业中有n个用户,则整个企业需要n(n-1 )个密钥,密钥的生成和分发将成为企业信息部门的噩梦。
缺点:不安全:对称加密算法的安全性取决于加密密钥的存储情况,但要求企业中所有密钥的人保守秘密是不可能的。 他们通常会无意中泄露密钥。 ——如果一个用户使用的密钥被入侵者获取,则入侵者可以读取用该用户密钥加密的所有文档。 如果整个企业共享一个加密密钥,则无法提及整个企业文件的机密性。 描述服务提供器
常见的加密算法是什么呢?
1.DES
DES算法均称为DataEncryptionStandard,是一种数据加密算法。 DES加密算法是IBM公司于1975年研究成功并公开的。 DES算法的三个条目参数是Key、Data和Mode。 其中Key是8字节共计64位,是DES算法的工作密钥; Data也是8字节64位,是要加密或解密的数据。
2.3度
TDEA (三重数据加密算法) TDEA )密码的俗称。 这相当于对每个数据块应用三次DES加密算法。 由于计算机计算能力的提高,原始DES密码的密钥长度更容易被暴力破解。3DES不是设计新的块密码算法,而是通过增加DES的密钥长度来避免同样的攻击。
3.AES
AES :也称为Rijndael加密法,是美国联邦政府采用的块加密标准。 代替原来的DES使用。 现已成为对称密钥加密的算法之一。
4.RC2
RC2是密码学家RonRivest设计的传统对称分组加密算法,可作为DES算法的推荐替代算法。 其输入和输出均为64位。 密钥的长度可以从1字节到128字节可变。
5.RC4
RC4加密算法是著名的RSA三人组中首屈一指的人物RonaldRivest于1987年设计的可变密钥长度流加密算法簇。 由于RC4核心部分的S-box长度是任意的,该算法的速度可以达到DES加密的10倍左右,具有较高水平的非线性。
6.RC5
RC5组密码算法是1994年由麻省理工学院RonaldL.Rivest教授发明,由RSA实验室分析。 这是一种参数可变的组加密算法,三个可变参数是组大小、密钥大小和加密轮数。 RC5算法中使用了异或、加法、循环3种运算。
非对称加密算法(asymmetriccryptographicalgorithm )又名“公钥加密算法”,此加密方法需要私钥和公钥对。 这两个密钥在数学上相关,用某个用户密钥加密的信息只能用该用户的解密密钥进行解密。 知道了其中一个,就不能计算另一个。 因此,如果公开一对秘密密钥的一方,就不会危害另一方的秘密性质。 将公钥称为公钥的不公开密钥是私钥。
非对称加密算法需要两个密钥:公钥(publickey )和私钥。 公开密钥和秘密密钥是一对,用公开密钥加密数据时,只能用对应秘密密钥解密; 用私钥加密数据后,只能用相应的公钥解密。 由于加密和解密使用两个不同的密钥,因此该算法称为非对称加密算法。
非对称加密算法实现秘密信息交换的基本过程是甲方生成一对密钥,将其中的一个密钥作为公共密钥公开给其他人,得到该公钥的乙方利用该密钥加密秘密信息
后再发送给甲方;甲方再用自己保存的另一把专用密钥对加密后的信息进行解密。另一方面,甲方可以使用乙方的公钥对机密信息进行签名后再发送给乙方;乙方再用自己的私匙对数据进行验签。非对称密码体制的特点:
1:算法强度复杂
2:安全性高:安全性依赖于算法与密钥但是由于其算法复杂,而使得加密解密速度没有对称加密解密的速度快。对称密码体制中只有一种密钥,并且是非公开的,如果要解密就得让对方知道密钥。所以保证其安全性就是保证密钥的安全,而非对称密钥体制有两种密钥,其中一个是公开的,这样就可以不需要像对称密码那样传输对方的密钥了。这样安全性就大了很多。
3:非对称加密算法的保密性比较好,它消除了最终用户交换密钥的需要。
工作原理
1.A要向B发送信息,A和B都要产生一对用于加密和解密的公钥和私钥。
2.A的私钥保密,A的公钥告诉B;B的私钥保密,B的公钥告诉A。
3.A要给B发送信息时,A用B的公钥加密信息,因为A知道B的公钥。
4.A将这个消息发给B(已经用B的公钥加密消息)。
5.B收到这个消息后,B用自己的私钥解密A的消息。其他所有收到这个报文的人都无法解密,因为只有B才有B的私钥。
主要算法
RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)。
实例:JSEncrypt (非对称加密)
<!DOCTYPE html>
<html>
<head>
<title>javascript非对称加密(RSA)JSEncrypt Example</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script src="http://libs.baidu.com/jquery/2.1.4/jquery.min.js"></script>
<script src="http://passport.cnblogs.com/scripts/jsencrypt.min.js"></script>
</head>
<body>
<div class="container">
<label for="privkey">Private Key</label><br/>//私钥
<textarea id="privkey" rows="15" cols="65">-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQDlOJu6TyygqxfWT7eLtGDwajtNFOb9I5XRb6khyfD1Yt3YiCgQ
WMNW649887VGJiGr/L5i2osbl8C9+WJTeucF+S76xFxdU6jE0NQ+Z+zEdhUTooNR
aY5nZiu5PgDB0ED/ZKBUSLKL7eibMxZtMlUDHjm4gwQco1KRMDSmXSMkDwIDAQAB
AoGAfY9LpnuWK5Bs50UVep5c93SJdUi82u7yMx4iHFMc/Z2hfenfYEzu+57fI4fv
xTQ//5DbzRR/XKb8ulNv6+CHyPF31xk7YOBfkGI8qjLoq06V+FyBfDSwL8KbLyeH
m7KUZnLNQbk8yGLzB3iYKkRHlmUanQGaNMIJziWOkN+N9dECQQD0ONYRNZeuM8zd
8XJTSdcIX4a3gy3GGCJxOzv16XHxD03GW6UNLmfPwenKu+cdrQeaqEixrCejXdAF
z/7+BSMpAkEA8EaSOeP5Xr3ZrbiKzi6TGMwHMvC7HdJxaBJbVRfApFrE0/mPwmP5
rN7QwjrMY+0+AbXcm8mRQyQ1+IGEembsdwJBAN6az8Rv7QnD/YBvi52POIlRSSIM
V7SwWvSK4WSMnGb1ZBbhgdg57DXaspcwHsFV7hByQ5BvMtIduHcT14ECfcECQATe
aTgjFnqE/lQ22Rk0eGaYO80cc643BXVGafNfd9fcvwBMnk0iGX0XRsOozVt5Azil
psLBYuApa66NcVHJpCECQQDTjI2AQhFc1yRnCU/YgDnSpJVm1nASoRUnU8Jfm3Oz
uku7JUXcVpt08DFSceCEX9unCuMcT72rAQlLpdZir876
-----END RSA PRIVATE KEY-----</textarea><br/>
<label for="pubkey">Public Key</label><br/>//公钥
<textarea id="pubkey" rows="15" cols="65">-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDlOJu6TyygqxfWT7eLtGDwajtN
FOb9I5XRb6khyfD1Yt3YiCgQWMNW649887VGJiGr/L5i2osbl8C9+WJTeucF+S76
xFxdU6jE0NQ+Z+zEdhUTooNRaY5nZiu5PgDB0ED/ZKBUSLKL7eibMxZtMlUDHjm4
gwQco1KRMDSmXSMkDwIDAQAB
-----END PUBLIC KEY-----</textarea><br/>
<div class="tool">
输入需要加密文字:<br/>
<textarea name="" id="needCrypt" cols="30" rows="10">测试XXXX</textarea>
<a rel="external nofollow" rel="external nofollow" href="javascript:void(0);" id="crypt-btn">加密</a><br/>
加密结果:<br/>
<textarea name="" id="resultCrypt" cols="30" rows="10">
</textarea>
<a rel="external nofollow" rel="external nofollow" href="javascript:void(0);" id="decrypt-btn">解密</a><br/>
解密结果:<br/>
<textarea name="" id="result" cols="30" rows="10">
</textarea>
</div>
<script type="text/javascript">
// Call this code when the page is done loading.
$(function() {
$("#crypt-btn").click(function(){
// Encrypt with the public key...
var encrypt = new JSEncrypt();
encrypt.setPublicKey($('#pubkey').val());//设置公钥
var encrypted = encrypt.encrypt($("#needCrypt").val());
document.getElementById("resultCrypt").innerText = encrypted;
});
$("#decrypt-btn").click(function(){
// Decrypt with the private key...
var decrypt = new JSEncrypt();
decrypt.setPrivateKey($('#privkey').val());//设置私钥
var uncrypted = decrypt.decrypt($("#resultCrypt").val());
document.getElementById("result").innerText = uncrypted;
});
});
</script>
</div>
</body>
</html>