public class Key {
// 主函数
public static void main(String args[]) throws Exception {
productKey();
}
/**
* 生成共享密钥
*
* @throws Exception
*/
public static void productKey() throws Exception {
// 1.得到密钥生成器,DESede一种加密算法
javax.crypto.KeyGenerator kg = javax.crypto.KeyGenerator
.getInstance("DESede");
// 2.指定密钥的长度
kg.init(168);
// 3.得到相应的密钥
SecretKey k = kg.generateKey();
// 4.将密钥写入相应的文件
java.io.FileOutputStream fos = new java.io.FileOutputStream("key.txt");
byte[] date = k.getEncoded();
fos.write(date);
fos.flush();// 强制输出
Journal.showINF("密钥文件已生成");
}
}
// 发送加密信息
public class Server extends Thread{
// 主函数
public static void main(String args[]) throws Exception {
java.net.ServerSocket server = new java.net.ServerSocket(2012);
Journal.showINF("服务器创建成功!");
while (true) {
java.net.Socket socket = server.accept();
Journal.showINF("客户端连接上了");
proccess(socket);
}
}
/**
* 利用服务器端的Socket发送消息
*
* @param socket
* @throws IOException
*/
public static void proccess(Socket socket) throws Exception {
// 得到原始输出流对象
java.io.OutputStream os = socket.getOutputStream();
// 得到加密输出流对象
OutputStream secOut=getSecOut(os);
//发给客户端
int count=0;
while(count<10){
count++;
String msg="发送的第"+count+"份加密文件\r\n";
secOut.write(msg.getBytes());
Journal.showINF("服务器发 "+msg.getBytes());
Thread.sleep(1000);
}
Journal.showERR("断开了");
}
/**
* 对原始输出流进行加密处理
*
* @param out
* @return
* @throws Exception
*/
public static OutputStream getSecOut(OutputStream out) throws Exception {
// 读取加密文件
java.io.FileInputStream fis = new java.io.FileInputStream("Key.txt");
byte[] data = new byte[fis.available()];
fis.read(data);
fis.close();
// 利用密钥数据、加密形式,得到指定的密钥
javax.crypto.spec.SecretKeySpec secretKey = new javax.crypto.spec.SecretKeySpec(
data, "DESede");
// 得到加密器
javax.crypto.Cipher cipher = javax.crypto.Cipher.getInstance("DESede");
// 利用密钥,进行加密器的初始化
cipher.init(cipher.ENCRYPT_MODE, secretKey);
//利用加密器对原始输出流进行加密
javax.crypto.CipherOutputStream cos = new javax.crypto.CipherOutputStream(
out, cipher);
return cos;
}
}
//接收加密信息
public class Client {
// 主函数
public static void main(String args[]) throws Exception {
java.net.Socket socket = new java.net.Socket("127.0.0.1", 2012);
Journal.showINF("客户机连接成功!");
// 得到原始输入流对象
java.io.InputStream is = socket.getInputStream();
// 得到加密输出流对象
InputStream secInt = getSecInt(is);
// 读取服务器发来的消息
int count = 0;
String msg="";
while (count < 10) {
count++;
int i = secInt.read();
while (i != 13) {
char c = (char) i;
msg+=c;
i = secInt.read();
}
msg=new String(msg.getBytes("ISO-8859-1"),"GBK").trim();
Journal.showINF("解密消息是 "+msg);
msg="";
}
}
/**
* 对原始输入流进行加密处理
*
* @param ins
* @return
* @throws Exception
*/
public static InputStream getSecInt(InputStream ins) throws Exception {
// 读取加密文件
java.io.FileInputStream fis = new java.io.FileInputStream("Key.txt");
byte[] data = new byte[fis.available()];
fis.read(data);
fis.close();
// 利用密钥数据、加密形式,得到指定的密钥
javax.crypto.spec.SecretKeySpec secretKey = new javax.crypto.spec.SecretKeySpec(
data, "DESede");
// 得到加密器
javax.crypto.Cipher cipher = javax.crypto.Cipher.getInstance("DESede");
// 利用密钥,进行加密器的初始化
cipher.init(cipher.DECRYPT_MODE, secretKey);
// 利用加密器对原始输入流进行加密,得到解密输入流
javax.crypto.CipherInputStream cos = new javax.crypto.CipherInputStream(
ins, cipher);
return cos;
}
}
public class Journal {
private static int INFOR = 0;// 一般信息的计数器
private static int ERROR = 0;// 严重错误信息的计数器
/**
* 一般信息的打印
*
* @param msg
* 要打印的信息
*/
public static void showINF(String msg) {
java.util.Date date = new java.util.Date();
String s = java.text.DateFormat.getInstance().format(date);
INFOR++;
System.out.println(INFOR + " " + s + " : " + msg);
}
/**
* 一般信息的打印
*
* @param msg
* 要打印的信息
*/
public static void showERR(String msg) {
java.util.Date date = new java.util.Date();
String s = java.text.DateFormat.getInstance().format(date);
ERROR++;
System.err.println(ERROR + " " + s + " : " + msg);
}
}
分享到:
相关推荐
在实际操作中,经常采用混合加密模式:利用非对称加密算法交换对称加密算法的密钥,再利用对称加密算法加密实际数据,从而结合两种加密算法的优点。 总之,加密算法是信息安全领域的基石,合理选择和使用加密算法...
加密主要分为两种类型:对称加密和非对称加密。这两种加密方式各有其特点,适用于不同的场景。 **对称加密** 是一种历史悠久的加密方法,它依赖于一个相同的密钥进行数据的加密和解密。这种加密方式速度快,效率高...
RSA 非对称加密算法 RSA 非对称加密算法是一种经典的非对称加密算法,由罗纳德·李维斯特、阿迪·萨莫尔和伦纳德·阿德曼三人于 1977 年共同提出的。该算法的主要思想是基于大素数的乘积和因式分解之间的关系,通过...
本实验报告主要涉及两种加密算法:对称加密算法DES(Data Encryption Standard)和非对称加密算法RSA。实验旨在帮助学生深入理解这两种算法的基本原理,并通过Python编程实现加密和解密过程。 ### **对称加密算法...
登录时,用户的密码用明文传输...非对称加密算法常用RSA算法,秘钥使用base64编码成字符串,后端使用jdk8的标准API,前端使用jsencrypt.js进行RSA的对应操作。经过测试,本例中的前后端代码的加密解密计算结果是一致的。
### 对称加密与非对称加密的介绍及区别 #### 一、对称加密技术概述 **对称加密**采用了对称密码编码技术,它的核心特点是文件加密和解密使用相同的密钥,即加密密钥也可以用作解密密钥。这种方法在密码学中被称为...
java关于加密的算法demo代码(Base64加密\数字签名\对称加密算法\非对称加密算法\消息摘要算法) JAVA安全实现三种方式: 1.JDK 2.Commons Codec 3.Bouncy Castle 一。非对称加密算法: 1.DH 2.RSA 3.ELGamal 二。...
此外,非对称加密通常用于初始化对称加密的密钥,这样可以结合两者的优点:非对称加密的安全性和对称加密的效率。 在实际应用中,这个工具包可能还包括对文件或数据流的加密解密功能,以及对加密结果的Base64编码和...
本工具是用于golang编写的,用于rsa非对称加密技术实现的对字符串的加密解密工具,可以对文件进行加密解密(txt、docx、xls文档等)。对文档加密会对文档同目录下生成一个后缀名加.hh的文档。 操作说明: 一、对字符...
非对称加密算法和数字签名是信息技术中两个关键的安全概念,尤其在网络安全和数据保护方面起着至关重要的作用。在Java编程环境中,这些技术被广泛应用于实现安全通信、身份验证和数据完整性保护。 非对称加密算法,...
本文将深入探讨对称加密的概念、工作原理,以及如何通过源代码实现文件的对称加密与解密。 对称加密是一种加密方法,其中加密和解密过程使用的是同一个密钥。这种方式简单高效,适用于大量数据的加密,因为它的计算...
6.用对方的公钥对称密钥进行加密(加密密钥) 7.将密文(5)和加密密钥(6)一起发给对方 接收方: 1.用自己的私钥对加密密钥进行解密,得到对称密钥--也只有自己才能解密。 2.用对称密钥对密文进行解密,得到...
非对称加密算法流程图,使用visio绘制。
对称加密、非对称加密、CA 认证、K8S 证书颁发机制理解 在信息安全领域中,加密和认证是两个非常重要的概念。本文将从对称加密、非对称加密、CA 认证、K8S 证书颁发机制等多方面详细介绍加密和认证的原理和机制。 ...
用mfc写的一个对称加密程序 用mfc写的一个对称加密程序 用mfc写的一个对称加密程序
### 对称与非对称加密详解 #### 一、基本概念 ##### 1.1 对称加密 在1976年之前,所有的加密技术都采用了一种模式,即发送方(甲方)和接收方(乙方)使用相同的密钥来进行加密和解密的过程。这种加密方式称为**...
非对称加密技术详解 非对称加密技术是一种在现代信息安全领域中占据核心地位的加密方式,相较于传统的对称加密算法,它引入了一种全新的密钥管理机制,即使用一对密钥——公钥和私钥来进行加密和解密操作。这一技术...
非对称加密JAVA实现,实现对超长内容进行加密
**AES非对称加密技术详解** 在信息安全领域,加密技术是保护数据安全的重要手段。AES(Advanced Encryption Standard),即高级加密标准,是一种广泛使用的对称加密算法,以其高效性和安全性著称。它在数据加密中...
在IT领域,对称加密算法是一种广泛用于数据保护的技术,特别是在C#编程环境中。这种算法基于一个密钥,用于加密和解密数据,因此被称为“对称”,因为用于加密和解密的密钥是相同的。下面我们将深入探讨C#中的对称...