本篇文章给大家谈谈简单加密算法有哪些应用实例以及对应的知识点,希望对各位有所帮助。
using System.Security.Cryptography;
using System.Text;
#region 加密密码,UserMd5(string str1)
protected string UserMd5(string str1)
{
string cl1 = str1;
string pwd = "";
MD5 md5 = MD5.Create();
// 加密后是一个字节类型的数组
byte[] s=md5.ComputeHash(Encoding.Unicode.GetBytes(cl1));
// 通过使用循环,将字节类型的数组转换为字符串,此字符串是常规字符格式化所得
for(int i = 0 ; i s.Length; i++)
{
// 将得到的字符串使用十六进制类型格式。格式后的字符是小写的字母,如果使用大写(X)则格式后的字符是大写字符
pwd = pwd + s[i].ToString("x");
}
return pwd;
}
#endregion
asp.net2003 c#的
目前IDEA在工程中已有大量应用实例,PGP(Pretty Good Privacy)就使用IDEA作为其分组加密算法;安全套接字层SSL(Secure Socket Layer)也将IDEA包含在其加密算法库SSLRef中;IDEA算法专利的所有者Ascom公司也推出了一系列基于IDEA算法的安全产品,包括:基于IDEA的Exchange安全插件、IDEA加密芯片、IDEA加密软件包等。IDEA算法的应用和研究正在不断走向成熟。
随着计算机网络和计算机通讯技术的发展,计算机密码学得到前所未有的重视并迅速普及和发展起来。由于密码系统的各种性能主要由密码算法所决定,不同的算法决定了不同的密码体制,而不同的密码体制又有着不同的优缺点:有的密码算法高速简便,但加解密密钥相同,密钥管理困难;有的密码算法密钥管理方便安全,但计算开销大、处理速度慢。基于此,本文针对两种典型的密码算法DES和RSA的特点进行讨论分析,并提出一种以这两种密码体制为基础的混合密码系统,来实现优势互补。
1 密码系统简介
1.1 密码系统分类
密码系统从原理上可分为两大类,即单密钥系统和双密钥系统。单密钥系统又称为对称密码系统,其加密密钥和解密密钥或者相同,或者实质上相同,即易于从一个密钥得出另一个,如图1所示。双密钥系统又称为公开密钥密码系统,它有两个密钥,一个是公开的,用K1表示,谁都可以使用;另一个是私人密钥,用K2表示,只由采用此系统的人掌握。从公开的密钥推不出私人密钥,如图2所示。
1.2 两种密码系统分析
1.2.1 对称密码系统(单钥密码系统)
对称密码系统中加密和解密均采用同一把密钥,而且通信双方必须都要获得这把密钥。这就带来了一系列问题。首先,密钥本身的发送就存在着风险,如果在发送中丢失,接受方就不可能重新得到密文的内容;其次,多人通信时密钥的组合的数量会出现爆炸性的膨胀,N个人两两通信,需要N*(N-1)/2把密钥,增加了分发密钥的代价和难度;最后,由于通信双方必须事先统一密钥,才能发送保密的信息,这样,陌生人之间就无法发送密文了。
1.2.2 公开密钥密码系统(双钥密码系统)
公开密钥密码系统中,收信人生成两把数学上关联但又不同的公钥和私钥,私钥自己保存,把公钥公布出去,发信人使用收信人的公钥对通信文件进行加密,收信人收到密文后用私钥解密。公开密钥密码系统的优势在于,首先,用户可以把用于加密的钥匙公开地发给任何人,并且除了持有私有密钥的收信人之外,无人能解开密文;其次,用户可以把公开钥匙发表或刊登出来,使得陌生人之间可以互发保密的通信;最后,公开密钥密码系统提供了数字签字的公开鉴定系统,而这是对称密码系统不具备的。
1.3 典型算法
对称密码系统的算法有DES,aes,RC系列,DEA等,公开密钥密码系统的算法有RSA,Diffie-Hellman, Merkle-Hellman等。
2 DES算法
DES (Data Encryption Standard,数据加密标准)是一个分组加密算法,它以64 bit位(8 byte)为分组对数据加密,其中有8 bit奇偶校验,有效密钥长度为56 bit。64 位一组的明文从算法的一端输入,64 位的密文从另一端输出。DES算法的加密和解密用的是同一算法,它的安全性依赖于所用的密钥。DES 对64位的明文分组进行操作,通过一个初始置换,将明文分组成左半部分和右半部分,各32位长。然后进行16轮完全相同的运算,这些运算被称为函数f,在运算过程中数据与密钥结合。经过16轮后,左、右半部分合在一起经过一个末置换(初始置换的逆置换),完成算法。在每一轮中,密钥位移位,然后再从密钥的56位中选出48位。通过一个扩展置换将数据的右半部分扩展成48位,并通过一个异或操作与48位密钥结合,通过8个s盒将这48位替代成新的32位数据,再将其置换一次。这些运算构成了函数f。然后,通过另一个异或运算,函数f输出与左半部分结合,其结果即成为新的右半部分, 原来的右半部分成为新的左半部分。将该操作重复16次,实现DES的16轮运算。
3 RSA算法
RSA算法使用两个密钥,一个公共密钥,一个私有密钥。如用其中一个加密,则可用另一个解密。密钥长度从40到2048 bit可变。加密时把明文分成块,块的大小可变,但不能超过密钥的长度,RSA算法把每一块明文转化为与密钥长度相同的密文块。密钥越长,加密效果越好,但加密解密的开销也大,所以要在安全与性能之间折衷考虑,一般64位是较合适的。RSA算法利用了陷门单向函数的一种可逆模指数运算,描述如下:(1)选择两个大素数p和q;(2)计算乘积n=pq和φ(n)=(p-1)(q-1);(3)选择大于1小于φ(n)的随机整数e,使得
gcd(e,φ(n))=1;(4)计算d使得de=1modφ(n);(5)对每一个密钥k=(n,p,q,d,e),定义加密变换为Ek(x)=xemodn,解密变换为Dk(y)=ydmodn,这里x,y∈Zn;(6)以{e,n}为公开密钥,{p,q,d}为私有密钥。
4 基于DES和RSA的混合密码系统
4.1 概述
混合密码系统充分利用了公钥密码和对称密码算法的优点,克服其缺点,解决了每次传送更新密钥的问题。发送者自动生成对称密钥,用对称密钥按照DES算法加密发送的信息,将生成的密文连同用接受方的公钥按照RSA算法加密后的对称密钥一起传送出去。收信者用其密钥按照RSA算法解密被加密的密钥来得到对称密钥,并用它来按照DES算法解密密文。
4.2 具体实现步骤
(1)发信方选择对称密钥K(一般为64位,目前可以达到192位)
(2)发信方加密消息:对明文按64位分组进行操作,通过一个初始置换,将明文分组成左半部分和右半部分。然后进行16轮完全相同的运算,最后,左、右半部分合在一起经过一个末置换(初始置换的逆置换),完成算法。在每一轮中,密钥位移位,然后再从密钥的56位中选出48位。通过一个扩展置换将数据的右半部分扩展成48位,并通过一个异或操作与48位密钥结合,通过8个S盒将这48位替代成新的32位数据,再将其置换一次。然后通过另一个异或运算,输出结果与左半部分结合,其结果即成为新的右半部分,原来的右半部分成为新的左半部分。如图3所示。
(3)收信方产生两个足够大的强质数p、q,计算n=p×q和z=(p-1)×(q-1),然后再选取一个与z互素的奇数e,从这个e值找出另一个值d,使之满足e×d=1 mod (z)条件。以两组数(n,e) 和 (n,d)分别作为公钥和私钥。收信方将公钥对外公开,从而收信方可以利用收信方的公钥对 (1)中产生的对称密钥的每一位x进行加密变换Ek(x)=xemodn;
(4)发信方将步骤(2)和(3)中得到的消息的密文和对称密钥的密文一起发送给收信方;
(5)收信方用(3)中得到的私钥来对对称密钥的每一位y进行解密变换Dk(y)=ydmodn,从而得到(1)中的K;
(6)收信方用对称密钥K和DES算法的逆步骤来对消息进行解密,具体步骤和(2)中恰好相反,也是有16轮迭代。
(7)既可以由收信方保留对称密钥K来进行下一次数据通信,也可以由收信方产生新的对称密钥,从而使K作废。
4.3 两点说明
4.3.1 用公钥算法加密密钥
在混合密码系统中,公开密钥算法不用来加密消息,而用来加密密钥,这样做有两个理由:第一,公钥算法比对称算法慢,对称算法一般比公钥算法快一千倍。计算机在大约15年后运行公开密钥密码算法的速度才能比得上现在计算机运行对称密码的速度。并且,随着带宽需求的增加,比公开密钥密码处理更快的加密数据要求越来越多。第二,公开密钥密码系统对选择明文攻击是脆弱的。密码分析者只需要加密所有可能的明文,将得到的所有密文与要破解的密文比较,这样,虽然它不可能恢复解密密钥,但它能够确定当前密文所对应的明文。
4.3.2 安全性分析
如果攻击者无论得到多少密文,都没有足够的信息去恢复明文,那么该密码系统就是无条件安全的。在理论上,只有一次一密的系统才能真正实现这一点。而在本文所讨论的混合密码系统中,发信方每次可以自由选择对称密钥来加密消息,然后用公钥算法来加密对称密钥,即用户可以采用一次一密的方式来进行数据通信,达到上述的无条件安全。
5 小结
基于DES和RSA的混合密码系统结合了公钥密码体制易于密钥分配的特点和对称密码体制易于计算、速度快的特点,为信息的安全传输提供了良好的、快捷的途径,使数据传输的密文被破解的几率大大降低,从而对数据传输的安全性形成更有力的保障,并且发信方和收信方对密钥的操作自由度得到了很大的发挥。
java加密字符串可以使用des加密算法,实例如下:
package test;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.security.*;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
/**
* 加密解密
*
* @author shy.qiu
* @since
*/
public class CryptTest {
/**
* 进行MD5加密
*
* @param info
* 要加密的信息
* @return String 加密后的字符串
*/
public String encryptToMD5(String info) {
byte[] digesta = null;
try {
// 得到一个md5的消息摘要
MessageDigest alga = MessageDigest.getInstance("MD5");
// 添加要进行计算摘要的信息
alga.update(info.getBytes());
// 得到该摘要
digesta = alga.digest();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
// 将摘要转为字符串
String rs = byte2hex(digesta);
return rs;
}
/**
* 进行SHA加密
*
* @param info
* 要加密的信息
* @return String 加密后的字符串
*/
public String encryptToSHA(String info) {
byte[] digesta = null;
try {
// 得到一个SHA-1的消息摘要
MessageDigest alga = MessageDigest.getInstance("SHA-1");
// 添加要进行计算摘要的信息
alga.update(info.getBytes());
// 得到该摘要
digesta = alga.digest();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
// 将摘要转为字符串
String rs = byte2hex(digesta);
return rs;
}
// //////////////////////////////////////////////////////////////////////////
/**
* 创建密匙
*
* @param algorithm
* 加密算法,可用 DES,DESede,Blowfish
* @return SecretKey 秘密(对称)密钥
*/
public SecretKey createSecretKey(String algorithm) {
// 声明KeyGenerator对象
KeyGenerator keygen;
// 声明 密钥对象
SecretKey deskey = null;
try {
// 返回生成指定算法的秘密密钥的 KeyGenerator 对象
keygen = KeyGenerator.getInstance(algorithm);
// 生成一个密钥
deskey = keygen.generateKey();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
// 返回密匙
return deskey;
}
/**
* 根据密匙进行DES加密
*
* @param key
* 密匙
* @param info
* 要加密的信息
* @return String 加密后的信息
*/
public String encryptToDES(SecretKey key, String info) {
// 定义 加密算法,可用 DES,DESede,Blowfish
String Algorithm = "DES";
// 加密随机数生成器 (RNG),(可以不写)
SecureRandom sr = new SecureRandom();
// 定义要生成的密文
byte[] cipherByte = null;
try {
// 得到加密/解密器
Cipher c1 = Cipher.getInstance(Algorithm);
// 用指定的密钥和模式初始化Cipher对象
// 参数:(ENCRYPT_MODE, DECRYPT_MODE, WRAP_MODE,UNWRAP_MODE)
c1.init(Cipher.ENCRYPT_MODE, key, sr);
// 对要加密的内容进行编码处理,
cipherByte = c1.doFinal(info.getBytes());
} catch (Exception e) {
e.printStackTrace();
}
// 返回密文的十六进制形式
return byte2hex(cipherByte);
}
/**
* 根据密匙进行DES解密
*
* @param key
* 密匙
* @param sInfo
* 要解密的密文
* @return String 返回解密后信息
*/
public String decryptByDES(SecretKey key, String sInfo) {
// 定义 加密算法,
String Algorithm = "DES";
// 加密随机数生成器 (RNG)
SecureRandom sr = new SecureRandom();
byte[] cipherByte = null;
try {
// 得到加密/解密器
Cipher c1 = Cipher.getInstance(Algorithm);
// 用指定的密钥和模式初始化Cipher对象
c1.init(Cipher.DECRYPT_MODE, key, sr);
// 对要解密的内容进行编码处理
cipherByte = c1.doFinal(hex2byte(sInfo));
} catch (Exception e) {
e.printStackTrace();
}
// return byte2hex(cipherByte);
return new String(cipherByte);
}
// /////////////////////////////////////////////////////////////////////////////
/**
* 创建密匙组,并将公匙,私匙放入到指定文件中
*
* 默认放入mykeys.bat文件中
*/
public void createPairKey() {
try {
// 根据特定的算法一个密钥对生成器
KeyPairGenerator keygen = KeyPairGenerator.getInstance("DSA");
// 加密随机数生成器 (RNG)
SecureRandom random = new SecureRandom();
// 重新设置此随机对象的种子
random.setSeed(1000);
// 使用给定的随机源(和默认的参数集合)初始化确定密钥大小的密钥对生成器
keygen.initialize(512, random);// keygen.initialize(512);
// 生成密钥组
KeyPair keys = keygen.generateKeyPair();
// 得到公匙
PublicKey pubkey = keys.getPublic();
// 得到私匙
PrivateKey prikey = keys.getPrivate();
// 将公匙私匙写入到文件当中
doObjToFile("mykeys.bat", new Object[] { prikey, pubkey });
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
}
/**
* 利用私匙对信息进行签名 把签名后的信息放入到指定的文件中
*
* @param info
* 要签名的信息
* @param signfile
* 存入的文件
*/
public void signToInfo(String info, String signfile) {
// 从文件当中读取私匙
PrivateKey myprikey = (PrivateKey) getObjFromFile("mykeys.bat", 1);
// 从文件中读取公匙
PublicKey mypubkey = (PublicKey) getObjFromFile("mykeys.bat", 2);
try {
// Signature 对象可用来生成和验证数字签名
Signature signet = Signature.getInstance("DSA");
// 初始化签署签名的私钥
signet.initSign(myprikey);
// 更新要由字节签名或验证的数据
signet.update(info.getBytes());
// 签署或验证所有更新字节的签名,返回签名
byte[] signed = signet.sign();
// 将数字签名,公匙,信息放入文件中
doObjToFile(signfile, new Object[] { signed, mypubkey, info });
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 读取数字签名文件 根据公匙,签名,信息验证信息的合法性
*
* @return true 验证成功 false 验证失败
*/
public boolean validateSign(String signfile) {
// 读取公匙
PublicKey mypubkey = (PublicKey) getObjFromFile(signfile, 2);
// 读取签名
byte[] signed = (byte[]) getObjFromFile(signfile, 1);
// 读取信息
String info = (String) getObjFromFile(signfile, 3);
try {
// 初始一个Signature对象,并用公钥和签名进行验证
Signature signetcheck = Signature.getInstance("DSA");
// 初始化验证签名的公钥
signetcheck.initVerify(mypubkey);
// 使用指定的 byte 数组更新要签名或验证的数据
signetcheck.update(info.getBytes());
System.out.println(info);
// 验证传入的签名
return signetcheck.verify(signed);
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 将二进制转化为16进制字符串
*
* @param b
* 二进制字节数组
* @return String
*/
public String byte2hex(byte[] b) {
String hs = "";
String stmp = "";
for (int n = 0; n b.length; n++) {
stmp = (java.lang.Integer.toHexString(b[n] 0XFF));
if (stmp.length() == 1) {
hs = hs + "0" + stmp;
} else {
hs = hs + stmp;
}
}
return hs.toUpperCase();
}
/**
* 十六进制字符串转化为2进制
*
* @param hex
* @return
*/
public byte[] hex2byte(String hex) {
byte[] ret = new byte[8];
byte[] tmp = hex.getBytes();
for (int i = 0; i 8; i++) {
ret[i] = uniteBytes(tmp[i * 2], tmp[i * 2 + 1]);
}
return ret;
}
/**
* 将两个ASCII字符合成一个字节; 如:"EF"-- 0xEF
*
* @param src0
* byte
* @param src1
* byte
* @return byte
*/
public static byte uniteBytes(byte src0, byte src1) {
byte _b0 = Byte.decode("0x" + new String(new byte[] { src0 }))
.byteValue();
_b0 = (byte) (_b0 4);
byte _b1 = Byte.decode("0x" + new String(new byte[] { src1 }))
.byteValue();
byte ret = (byte) (_b0 ^ _b1);
return ret;
}
/**
* 将指定的对象写入指定的文件
*
* @param file
* 指定写入的文件
* @param objs
* 要写入的对象
*/
public void doObjToFile(String file, Object[] objs) {
ObjectOutputStream oos = null;
try {
FileOutputStream fos = new FileOutputStream(file);
oos = new ObjectOutputStream(fos);
for (int i = 0; i objs.length; i++) {
oos.writeObject(objs[i]);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
oos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 返回在文件中指定位置的对象
*
* @param file
* 指定的文件
* @param i
* 从1开始
* @return
*/
public Object getObjFromFile(String file, int i) {
ObjectInputStream ois = null;
Object obj = null;
try {
FileInputStream fis = new FileInputStream(file);
ois = new ObjectInputStream(fis);
for (int j = 0; j i; j++) {
obj = ois.readObject();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
ois.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return obj;
}
/**
* 测试
*
* @param args
*/
public static void main(String[] args) {
CryptTest jiami = new CryptTest();
// 执行MD5加密"Hello world!"
System.out.println("Hello经过MD5:" + jiami.encryptToMD5("Hello"));
// 生成一个DES算法的密匙
SecretKey key = jiami.createSecretKey("DES");
// 用密匙加密信息"Hello world!"
String str1 = jiami.encryptToDES(key, "Hello");
System.out.println("使用des加密信息Hello为:" + str1);
// 使用这个密匙解密
String str2 = jiami.decryptByDES(key, str1);
System.out.println("解密后为:" + str2);
// 创建公匙和私匙
jiami.createPairKey();
// 对Hello world!使用私匙进行签名
jiami.signToInfo("Hello", "mysign.bat");
// 利用公匙对签名进行验证。
if (jiami.validateSign("mysign.bat")) {
System.out.println("Success!");
} else {
System.out.println("Fail!");
}
}
}
由于网络所带来的诸多不安全因素使得网络使用者不得不采取相应的网络安全对策。为了堵塞安全漏洞和提供安全的通信服务,必须运用一定的技术来对网络进行安全建设,这已为广大网络开发商和网络用户所共识。
现今主要的网络安全技术有以下几种:
一、加密路由器(Encrypting Router)技术
加密路由器把通过路由器的内容进行加密和压缩,然后让它们通过不安全的网络进行传输,并在目的端进行解压和解密。
二、安全内核(Secured Kernel)技术
人们开始在操作系统的层次上考虑安全性,尝试把系统内核中可能引起安全性问题的部分从内核中剔除出去,从而使系统更安全。如S olaris操作系统把静态的口令放在一个隐含文件中, 使系统的安全性增强。
三、网络地址转换器(Network Address Translater)
网络地址转换器也称为地址共享器(Address Sharer)或地址映射器,初衷是为了解决IP 地址不足,现多用于网络安全。内部主机向外部主机连接时,使用同一个IP地址;相反地,外部主机要向内部主机连接时,必须通过网关映射到内部主机上。它使外部网络看不到内部网络, 从而隐藏内部网络,达到保密作用。
数据加密(Data Encryption)技术
所谓加密(Encryption)是指将一个信息(或称明文--plaintext) 经过加密钥匙(Encrypt ionkey)及加密函数转换,变成无意义的密文( ciphertext),而接收方则将此密文经过解密函数、解密钥匙(Decryti on key)还原成明文。加密技术是网络安全技术的基石。
数据加密技术要求只有在指定的用户或网络下,才能解除密码而获得原来的数据,这就需要给数据发送方和接受方以一些特殊的信息用于加解密,这就是所谓的密钥。其密钥的值是从大量的随机数中选取的。按加密算法分为专用密钥和公开密钥两种。
专用密钥,又称为对称密钥或单密钥,加密时使用同一个密钥,即同一个算法。如DES和MIT的Kerberos算法。单密钥是最简单方式,通信双方必须交换彼此密钥,当需给对方发信息时,用自己的加密密钥进行加密,而在接收方收到数据后,用对方所给的密钥进行解密。这种方式在与多方通信时因为需要保存很多密钥而变得很复杂,而且密钥本身的安全就是一个问题。
DES是一种数据分组的加密算法,它将数据分成长度为6 4位的数据块,其中8位用作奇偶校验,剩余的56位作为密码的长度。第一步将原文进行置换,得到6 4位的杂乱无章的数据组;第二步将其分成均等两段 ;第三步用加密函数进行变换,并在给定的密钥参数条件下,进行多次迭代而得到加密密文。
公开密钥,又称非对称密钥,加密时使用不同的密钥,即不同的算法,有一把公用的加密密钥,有多把解密密钥,如RSA算法。
在计算机网络中,加密可分为"通信加密"(即传输过程中的数据加密)和"文件加密"(即存储数据加密)。通信加密又有节点加密、链路加密和端--端加密3种。
①节点加密,从时间坐标来讲,它在信息被传入实际通信连接点 (Physical communication link)之前进行;从OSI 7层参考模型的坐标 (逻辑空间)来讲,它在第一层、第二层之间进行; 从实施对象来讲,是对相邻两节点之间传输的数据进行加密,不过它仅对报文加密,而不对报头加密,以便于传输路由的选择。
②链路加密(Link Encryption),它在数据链路层进行,是对相邻节点之间的链路上所传输的数据进行加密,不仅对数据加密还对报头加密。
③端--端加密(End-to-End Encryption),它在第六层或第七层进行 ,是为用户之间传送数据而提供的连续的保护。在始发节点上实施加密,在中介节点以密文形式传输,最后到达目的节点时才进行解密,这对防止拷贝网络软件和软件泄漏也很有效。
在OSI参考模型中,除会话层不能实施加密外,其他各层都可以实施一定的加密措施。但通常是在最高层上加密,即应用层上的每个应用都被密码编码进行修改,因此能对每个应用起到保密的作用,从而保护在应用层上的投资。假如在下面某一层上实施加密,如TCP层上,就只能对这层起到保护作用。
值得注意的是,能否切实有效地发挥加密机制的作用,关键的问题在于密钥的管理,包括密钥的生存、分发、安装、保管、使用以及作废全过程。
(1)数字签名
公开密钥的加密机制虽提供了良好的保密性,但难以鉴别发送者, 即任何得到公开密钥的人都可以生成和发送报文。数字签名机制提供了一种鉴别方法,以解决伪造、抵赖、冒充和篡改等问题。
数字签名一般采用不对称加密技术(如RSA),通过对整个明文进行某种变换,得到一个值,作为核实签名。接收者使用发送者的公开密钥对签名进行解密运算,如其结果为明文,则签名有效,证明对方的身份是真实的。当然,签名也可以采用多种方式,例如,将签名附在明文之后。数字签名普遍用于银行、电子贸易等。
数字签名不同于手写签字:数字签名随文本的变化而变化,手写签字反映某个人个性特征, 是不变的;数字签名与文本信息是不可分割的,而手写签字是附加在文本之后的,与文本信息是分离的。
(2)Kerberos系统
Kerberos系统是美国麻省理工学院为Athena工程而设计的,为分布式计算环境提供一种对用户双方进行验证的认证方法。
它的安全机制在于首先对发出请求的用户进行身份验证,确认其是否是合法的用户;如是合法的用户,再审核该用户是否有权对他所请求的服务或主机进行访问。从加密算法上来讲,其验证是建立在对称加密的基础上的。
Kerberos系统在分布式计算环境中得到了广泛的应用(如在Notes 中),这是因为它具有如下的特点:
①安全性高,Kerberos系统对用户的口令进行加密后作为用户的私钥,从而避免了用户的口令在网络上显示传输,使得窃听者难以在网络上取得相应的口令信息;
②透明性高,用户在使用过程中,仅在登录时要求输入口令,与平常的操作完全一样,Ker beros的存在对于合法用户来说是透明的;
③可扩展性好,Kerberos为每一个服务提供认证,确保应用的安全。
Kerberos系统和看电影的过程有些相似,不同的是只有事先在Ker beros系统中登录的客户才可以申请服务,并且Kerberos要求申请到入场券的客户就是到TGS(入场券分配服务器)去要求得到最终服务的客户。
Kerberos的认证协议过程如图二所示。
Kerberos有其优点,同时也有其缺点,主要如下:
①、Kerberos服务器与用户共享的秘密是用户的口令字,服务器在回应时不验证用户的真实性,假设只有合法用户拥有口令字。如攻击者记录申请回答报文,就易形成代码本攻击。
②、Kerberos服务器与用户共享的秘密是用户的口令字,服务器在回应时不验证用户的真实性,假设只有合法用户拥有口令字。如攻击者记录申请回答报文,就易形成代码本攻击。
③、AS和TGS是集中式管理,容易形成瓶颈,系统的性能和安全也严重依赖于AS和TGS的性能和安全。在AS和TGS前应该有访问控制,以增强AS和TGS的安全。
④、随用户数增加,密钥管理较复杂。Kerberos拥有每个用户的口令字的散列值,AS与TGS 负责户间通信密钥的分配。当N个用户想同时通信时,仍需要N*(N-1)/2个密钥
( 3 )、PGP算法
PGP(Pretty Good Privacy)是作者hil Zimmermann提出的方案, 从80年代中期开始编写的。公开密钥和分组密钥在同一个系统中,公开密钥采用RSA加密算法,实施对密钥的管理;分组密钥采用了IDEA算法,实施对信息的加密。
PGP应用程序的第一个特点是它的速度快,效率高;另一个显著特点就是它的可移植性出色,它可以在多种操作平台上运行。PGP主要具有加密文件、发送和接收加密的E-mail、数字签名等。
(4)、PEM算法
保密增强邮件(Private Enhanced Mail,PEM),是美国RSA实验室基于RSA和DES算法而开发的产品,其目的是为了增强个人的隐私功能, 目前在Internet网上得到了广泛的应用,专为E-mail用户提供如下两类安全服务:
对所有报文都提供诸如:验证、完整性、防抵 赖等安全服务功能; 提供可选的安全服务功能,如保密性等。
PEM对报文的处理经过如下过程:
第一步,作规范化处理:为了使PEM与MTA(报文传输代理)兼容,按S MTP协议对报文进行规范化处理;
第二步,MIC(Message Integrity Code)计算;
第三步,把处理过的报文转化为适于SMTP系统传输的格式。
身份验证技术
身份识别(Identification)是指定用户向系统出示自己的身份证明过程。身份认证(Authertication)是系统查核用户的身份证明的过程。人们常把这两项工作统称为身份验证(或身份鉴别),是判明和确认通信双方真实身份的两个重要环节。
Web网上采用的安全技术
在Web网上实现网络安全一般有SHTTP/HTTP和SSL两种方式。
(一)、SHTTP/HTTP
SHTTP/HTTP可以采用多种方式对信息进行封装。封装的内容包括加密、签名和基于MAC 的认证。并且一个消息可以被反复封装加密。此外,SHTTP还定义了包头信息来进行密钥传输、认证传输和相似的管理功能。SHTTP可以支持多种加密协议,还为程序员提供了灵活的编程环境。
SHTTP并不依赖于特定的密钥证明系统,它目前支持RSA、带内和带外以及Kerberos密钥交换。
(二)、SSL(安全套层) 安全套接层是一种利用公开密钥技术的工业标准。SSL广泛应用于Intranet和Internet 网,其产品包括由Netscape、Microsoft、IBM 、Open Market等公司提供的支持SSL的客户机和服务器,以及诸如Apa che-SSL等产品。
SSL提供三种基本的安全服务,它们都使用公开密钥技术。
①信息私密,通过使用公开密钥和对称密钥技术以达到信息私密。SSL客户机和SSL服务器之间的所有业务使用在SSL握手过程中建立的密钥和算法进行加密。这样就防止了某些用户通过使用IP packet sniffer工具非法窃听。尽管packet sniffer仍能捕捉到通信的内容, 但却无法破译。 ②信息完整性,确保SSL业务全部达到目的。如果Internet成为可行的电子商业平台,应确保服务器和客户机之间的信息内容免受破坏。SSL利用机密共享和hash函数组提供信息完整性服务。③相互认证,是客户机和服务器相互识别的过程。它们的识别号用公开密钥编码,并在SSL握手时交换各自的识别号。为了验证证明持有者是其合法用户(而不是冒名用户),SSL要求证明持有者在握手时对交换数据进行数字式标识。证明持有者对包括证明的所有信息数据进行标识以说明自己是证明的合法拥有者。这样就防止了其他用户冒名使用证明。证明本身并不提供认证,只有证明和密钥一起才起作用。 ④SSL的安全性服务对终端用户来讲做到尽可能透明。一般情况下,用户只需单击桌面上的一个按钮或联接就可以与SSL的主机相连。与标准的HTTP连接申请不同,一台支持SSL的典型网络主机接受SSL连接的默认端口是443而不是80。
当客户机连接该端口时,首先初始化握手协议,以建立一个SSL对话时段。握手结束后,将对通信加密,并检查信息完整性,直到这个对话时段结束为止。每个SSL对话时段只发生一次握手。相比之下,HTTP 的每一次连接都要执行一次握手,导致通信效率降低。一次SSL握手将发生以下事件:
1.客户机和服务器交换X.509证明以便双方相互确认。这个过程中可以交换全部的证明链,也可以选择只交换一些底层的证明。证明的验证包括:检验有效日期和验证证明的签名权限。
2.客户机随机地产生一组密钥,它们用于信息加密和MAC计算。这些密钥要先通过服务器的公开密钥加密再送往服务器。总共有四个密钥分别用于服务器到客户机以及客户机到服务器的通信。
3.信息加密算法(用于加密)和hash函数(用于确保信息完整性)是综合在一起使用的。Netscape的SSL实现方案是:客户机提供自己支持的所有算法清单,服务器选择它认为最有效的密码。服务器管理者可以使用或禁止某些特定的密码。
代理服务
在 Internet 中广泛采用代理服务工作方式, 如域名系统(DNS), 同时也有许多人把代理服务看成是一种安全性能。
从技术上来讲代理服务(Proxy Service)是一种网关功能,但它的逻辑位置是在OSI 7层协议的应用层之上。
代理(Proxy)使用一个客户程序,与特定的中间结点链接,然后中间结点与期望的服务器进行实际链接。与应用网关型防火墙所不同的是,使用这类防火墙时外部网络与内部网络之间不存在直接连接,因此 ,即使防火墙产生了问题,外部网络也无法与被保护的网络连接。
防火墙技术
(1)防火墙的概念
在计算机领域,把一种能使一个网络及其资源不受网络"墙"外"火灾"影响的设备称为"防火墙"。用更专业一点的话来讲,防火墙(FireW all)就是一个或一组网络设备(计算机系统或路由器等),用来在两个或多个网络间加强访问控制,其目的是保护一个网络不受来自另一个网络的攻击。可以这样理解,相当于在网络周围挖了一条护城河,在唯一的桥上设立了安全哨所,进出的行人都要接受安全检查。
防火墙的组成可以这样表示:防火墙=过滤器+安全策略(+网关)。
(2)防火墙的实现方式
①在边界路由器上实现;
②在一台双端口主机(dual-homed host)上实现;
③在公共子网(该子网的作用相当于一台双端口主机)上实现,在此子网上可建立含有停火区结构的防火墙。
(3)防火墙的网络结构
网络的拓扑结构和防火墙的合理配置与防火墙系统的性能密切相关,防火墙一般采用如下几种结构。
①最简单的防火墙结构
这种网络结构能够达到使受保护的网络只能看到"桥头堡主机"( 进出通信必经之主机), 同时,桥头堡主机不转发任何TCP/IP通信包, 网络中的所有服务都必须有桥头堡主机的相应代理服务程序来支持。但它把整个网络的安全性能全部托付于其中的单个安全单元,而单个网络安全单元又是攻击者首选的攻击对象,防火墙一旦破坏,桥头堡主机就变成了一台没有寻径功能的路由器,系统的安全性不可靠。
②单网端防火墙结构
其中屏蔽路由器的作用在于保护堡垒主机(应用网关或代理服务) 的安全而建立起一道屏障。在这种结构中可将堡垒主机看作是信息服务器,它是内部网络对外发布信息的数据中心,但这种网络拓扑结构仍把网络的安全性大部分托付给屏蔽路由器。系统的安全性仍不十分可靠。
③增强型单网段防火墙的结构
为增强网段防火墙安全性,在内部网与子网之间增设一台屏蔽路由器,这样整个子网与内外部网络的联系就各受控于一个工作在网络级的路由器,内部网络与外部网络仍不能直接联系,只能通过相应的路由器与堡垒主机通信。
④含"停火区"的防火墙结构
针对某些安全性特殊需要, 可建立如下的防火墙网络结构。 网络的整个安全特性分担到多个安全单元, 在外停火区的子网上可联接公共信息服务器,作为内外网络进行信息交换的场所。
网络反病毒技术
由于在网络环境下,计算机病毒具有不可估量的威胁性和破坏力, 因此计算机病毒的防范也是网络安全性建设中重要的一环。网络反病毒技术也得到了相应的发展。
网络反病毒技术包括预防病毒、检测病毒和消毒等3种技术。(1) 预防病毒技术,它通过自身常驻系统内存,优先获得系统的控制权,监视和判断系统中是否有病毒存在,进而阻止计算机病毒进入计算机系统和对系统进行破坏。这类技术是:加密可执行程序、引导区保护、系统监控与读写控制(如防病毒卡)等。(2)检测病毒技术,它是通过对计算机病毒的特征来进行判断的技术,如自身校验、关键字、文件长度的变化等。(3)消毒技术,它通过对计算机病毒的分析,开发出具有删除病毒程序并恢复原文件的软件。
网络反病毒技术的实施对象包括文件型病毒、引导型病毒和网络病毒。
网络反病毒技术的具体实现方法包括对网络服务器中的文件进行频繁地扫描和监测;在工作站上采用防病毒芯片和对网络目录及文件设置访问权限等。
随着网上应用不断发展,网络技术不断应用,网络不安全因素将会不断产生,但互为依存的,网络安全技术也会迅速的发展,新的安全技术将会层出不穷,最终Internet网上的安全问题将不会阻挡我们前进的步伐
给文件加密,我们公司使用的是超级加密3000软件,这款软件操作起来还是比较简便的。
启动超级加密3000进入软件主界面,在软件主窗口下方的的文件浏览控件里面选择您需要加密的文件,然后点击窗口上方的“数据加密”按钮。
在弹出的数据加密窗口中输入文件加密密码,选择合适的文件加密类型,然后点击确定按钮就可以了。
您可以使用这个方法给您的文件加密试试。
随着社会的发展,产品的更新速度也是越来越快,算法是方案的核心,保护开发者和消费者的权益刻不容缓,那么加密芯片在其中就扮演了重要的角色,如何选择加密芯片呢?
1.市面上加密芯片种类繁多,算法多种,加密芯片强度参差不齐,加密性能与算法、秘钥密切相关。常见的加密算法有对称算法,非对称算法,国密算法,大部分都是基于I2C、SPI或1-wire协议进行通信。加密芯片还是需要项目实际需求选择,比如对称加密算法的特点是计算量小、加密速度快、加密效率高等。
2.因为单片机软加密性能较弱且非常容易被复制,所以有了加密芯片的产生,大大增加了破解难度和生产成本。目前加密芯片广泛应用于车载电子、消费电子、美容医疗、工业控制、AI智能等行业。
3.韩国KEROS加密芯片专注加密领域十多年,高安全性、低成本,在加密保护领域受到了众多客户的高度赞扬及认可。KEROS采用先进的内置aes256安全引擎和加密功能,通过真动态数据交互并为系统中敏感信息的存储提供了安全的场所,有了它的保护电路,即使受到攻击,这些信息也可以保持安全。其封装SOP8,SOT23-6,TDFN-6集成I2C与1-wire协议满足不同应用需求。CK02AT、CK22AT、CK02AP、CK22AP支持1.8V-3.6V,256bit位秘钥长度,5bytes SN序列号,支持定制化免烧录,加密行业首选。关于简单加密算法有哪些应用实例的介绍到此就结束了,感谢大家耐心阅读。
本文标签:简单加密算法有哪些应用实例