使用对称加密算法(DES)加密文件,使用非对称加密算法(RSA)加密生成的DES密钥,使用哈希函数(MD5)生成文件摘要,并对摘要进行签名

发送方A要将DES加密后的文件,RSA加密后的DES密钥,以及签名的结果打包发送给接收方B

发送方A需要完成的任务
1.用des对消息进行加密,加密后的内容存入文件
2.用接受方B生成的公钥对生成的des密钥进行加密----注意,在消息发送之前,发送方A和接收方B已经沟通好公私钥,故在下图中,如果是第一次运行该代码,rsa1.generateKeyPair(publicKeyFile,privateKeyFile)
这句话不需要注释掉,但是如果已经运行过,文件中就会存在公私钥对,再次运行,又会随机生成公私钥,导致接收方B解密失败

3.对消息签名,调用函数即可,签名函数中包含了哈希,该函数是对消息进行哈希,生成摘要,再对摘要进行签名,实现了消息的完整性和不可否认性
接受方B需要完成的任务
1.生成公私钥对,并存入文件中
2.用自己的RSA私钥解密出DES密钥
3.用解密出的DES密钥解密加密文件
4.用发送端的公钥解密签名,得到文件摘要,将自己收到的消息进行哈希,生成一个文件摘要,比较2个文件摘要,若相等,则表明该消息在发送的过程中没有被篡改
发送方源代码

package mimaExample;import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.util.Base64;import javax.crypto.SecretKey;public class Send {//保存文件public void saveFile(String s,String url) throws IOException {File f =new File(url);if(!f.exists()) {f.createNewFile();}OutputStreamWriter write=new OutputStreamWriter(new FileOutputStream(f),"utf-8");BufferedWriter writer=new BufferedWriter(write);writer.write(s);System.out.println("write successful");writer.close();}  //读取文件public String readFile(String filename) {try {File f=new File(filename);if(f.isFile()&&f.exists()){InputStreamReader reader=new InputStreamReader(new FileInputStream(f),"utf-8");BufferedReader br=new BufferedReader(reader);String line;while((line=br.readLine())!=null){return line;}reader.close();}}catch(Exception e) {e.printStackTrace();}return null;}public static void main(String[] args) throws Exception{//用DES加密文件LqqAddress.txt文件,并将加密过的文件存入LqqAddressSerect.txt中DESdemo des1=new DESdemo();String srcFile="LqqAddress.txt";String destFile="LqqAddressSerect.txt";des1.encryptFile(srcFile, destFile);//将生成的DES密钥存入临时变量DesKey中SecretKey DesKey = des1.mykey;byte[] encodedKey = DesKey.getEncoded();//对des密钥进行base64编码Base64.Encoder encoder = Base64.getEncoder();String deskey = encoder.encodeToString(encodedKey);System.out.println("-----------DESKEY-----------"+"\n"+deskey);//用RSA加密DES密钥//1.从文件中读出接收端生成的公钥RSAdemo rsa2 =new RSAdemo();String publicKeyFile = "public_key.txt";String pubkeyStr = rsa2.readFile2String(publicKeyFile);RSAPublicKey publicKey = rsa2.loadPublicKey(pubkeyStr);//2.用RSA公钥加密DES密钥String s10=new String(encodedKey);System.out.println("处理前DES密钥是:" + "\n"+s10);byte[] resultBytes = rsa2.encrypt(publicKey, encodedKey);String resultStr = encoder.encodeToString(resultBytes);//因为RSA的key自动得到,因此加密结果在变化System.out.println("加密后是(base64),并写入文件:\n" + resultStr);//写入文件Send s1=new Send();s1.saveFile(resultStr, "RsaDesKey.txt");//签名RSAdemo rsa3=new RSAdemo();Send s2=new Send();String msg_sign=s2.readFile("LqqAddress.txt");//1.生成签名所需的私钥String publicKeyFile_sign = "public_key_sign.txt";String privateKeyFile_sign= "private_key_sign.txt";//修改1:注释掉该句话:自动产生了密码//rsa3.generateKeyPair(publicKeyFile_sign, privateKeyFile_sign);//1.从文件中加载私钥String prikeyStr = rsa3.readFile2String(privateKeyFile_sign);RSAPrivateKey privateKey = rsa3.loadPrivateKey(prikeyStr);//2.对LqqAddress.txt进行签名                                 String signStr = rsa3.sign(msg_sign, privateKey);//签名所需的公私钥和加解密的公私钥不能相同System.out.println(msg_sign + " 的签名结果为:\n" + signStr);//3.将签名的结果保存到文件sign.txt中s2.saveFile(signStr, "sign.txt");}}

接收方源代码

package mimaExample;import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.util.Base64;public class Recive {//保存文件public void saveFile(String s,String url) throws IOException {File f =new File(url);if(!f.exists()) {f.createNewFile();}OutputStreamWriter write=new OutputStreamWriter(new FileOutputStream(f),"utf-8");BufferedWriter writer=new BufferedWriter(write);writer.write(s);System.out.println("write successful");writer.close();}  //读取文件public String readFile(String url) {try {File f=new File(url);if(f.isFile()&&f.exists()){InputStreamReader reader=new InputStreamReader(new FileInputStream(f),"utf-8");BufferedReader br=new BufferedReader(reader);String line;while((line=br.readLine())!=null){return line;}reader.close();}}catch(Exception e) {e.printStackTrace();}return null;}public static void main(String[] args) throws Exception{//生成RSA公私钥//产生公私钥对并将其存入文件中RSAdemo rsa1=new RSAdemo();String publicKeyFile = "public_key.txt";String privateKeyFile = "private_key.txt";//修改1:注释掉该句话:自动产生了密码//rsa1.generateKeyPair(publicKeyFile, privateKeyFile);//用RSA私钥对RsaDesKey.txt文件进行解密      //1.从文件中加载私钥String prikeyStr = rsa1.readFile2String(privateKeyFile);RSAPrivateKey privateKey = rsa1.loadPrivateKey(prikeyStr);//2.将RsaDesKey.txt文件读取出来Recive rec1=new Recive();String rdk=rec1.readFile("RsaDesKey.txt");System.out.println("加密后的DES密钥:"+"\n"+rdk);//从base64数组中解码出byte数组Base64.Decoder decoder = Base64.getDecoder();byte[] resultBytes = decoder.decode(rdk);//3.用rsa私钥解密byte[] decBytes = rsa1.decrypt(privateKey, resultBytes);String s1=new String(decBytes);//4.将得到的DES密钥存到DesKey.txt文件中,在NewDESdemo.java中读出rec1.saveFile(s1, "DesKey.txt");System.out.println("DES密钥是:" + "\n"+s1);//用DES密钥对加密过的文件LqqAddressSerect.txt进行解密,解密后的文件写到plain.txt文件中NewDESdemo des=new NewDESdemo();des.decryptFile("LqqAddressSerect.txt");//签名验证RSAdemo rsa4=new RSAdemo();Recive rec2=new Recive();String msg_sign2=rec2.readFile("LqqAddress.txt");//1.从文件中读出签名的结果String signStr=rec2.readFile("sign.txt");//2.从文件中读出发送方产生的公钥String publicKeyFile_sign = "public_key_sign.txt";String pubkeyStr = rsa4.readFile2String(publicKeyFile_sign);RSAPublicKey publicKey = rsa4.loadPublicKey(pubkeyStr);boolean verifyResult = rsa4.verify(msg_sign2, signStr, publicKey);System.out.println("签名验证结果为; " + verifyResult);}}

接下来的DES,RSA,MD5都是可以单独运行的,我做的工作其实就是调用函数实现文件的安全传输

DES加密解密源代码

package mimaExample;import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.spec.InvalidKeySpecException;import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.CipherInputStream;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;public class DESdemo {  //KeyGenerator 提供对称密钥生成器的功能,支持各种算法  private KeyGenerator keygen;  //SecretKey 负责保存对称密钥  private SecretKey deskey;  SecretKey mykey;//Cipher负责完成加密或解密工作  private Cipher c;  //该字节数组负责保存加密的结果  private byte[] cipherByte;  /** * 辅助方法,字节数组转16进制 * @param bytes 需要转换的byte数组 * @return  转换后的Hex字符串 */
public static String bytesToHex(byte[] bytes) {  StringBuffer sb = new StringBuffer();  for(int i = 0; i < bytes.length; i++) {  String hex = Integer.toHexString(bytes[i] & 0xFF);  if(hex.length() < 2){  sb.append(0);  }  sb.append(hex);
//        sb.append(" ");//每个十六进制之间加入一个空格}  return sb.toString();
} public DESdemo() throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, InvalidKeySpecException{  //方法1 自动产生密码//实例化支持DES算法的密钥生成器(算法名称命名需按规定,否则抛出异常)
//        keygen = KeyGenerator.getInstance("DES");
//        //生成密钥
//        deskey = keygen.generateKey();
//
//        //获取密码的字符数组
//        byte[] encodedKey = deskey.getEncoded();
//        //生成key的字符串
//        System.out.println("DES Key is: "+ bytesToHex(encodedKey));//方法2 指定密钥进行加解密//byte[] password = {'a','b','c','d','e','f','g','h'};//指定密码为abcdefghbyte[] password = "2018212176".getBytes(); DESKeySpec keySpec = new DESKeySpec(password);//转成des key对象SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");mykey = keyFactory.generateSecret(keySpec);//打印手工设置的keybyte[] myEncodedKey = mykey.getEncoded();//System.out.println("My Key is: "+ bytesToHex(myEncodedKey));//生成Cipher对象,指定其支持的DES算法  c = Cipher.getInstance("DES");  }  /** * 对字符串加密 *  * @param str * @return * @throws InvalidKeyException * @throws IllegalBlockSizeException * @throws BadPaddingException */  public byte[] Encrytor(String str) throws InvalidKeyException,  IllegalBlockSizeException, BadPaddingException {  // 根据密钥,对Cipher对象进行初始化,ENCRYPT_MODE表示加密模式  c.init(Cipher.ENCRYPT_MODE, mykey);  // 输入的是字符串,先转成对应的byte数组byte[] src = str.getBytes();  // 加密,结果保存进cipherByte  cipherByte = c.doFinal(src);  return cipherByte;  }  /** * 对字符串解密 *  * @param buff * @return * @throws InvalidKeyException * @throws IllegalBlockSizeException * @throws BadPaddingException */  public byte[] Decryptor(byte[] buff) throws InvalidKeyException,  IllegalBlockSizeException, BadPaddingException {  // 根据密钥,对Cipher对象进行初始化,DECRYPT_MODE表示加密模式  c.init(Cipher.DECRYPT_MODE, mykey);  cipherByte = c.doFinal(buff);  return cipherByte;  }  /*** 对文件进行加密* @param srcFile:要加密的明文文件* @param destFile:加密结果存储的文件* @throws NoSuchPaddingException * @throws NoSuchAlgorithmException * @throws InvalidKeyException * @throws IOException * * **/public void encryptFile(String srcFile,String destFile) throws Exception{InputStream fis = new FileInputStream(srcFile);OutputStream fos = new FileOutputStream(destFile);//加密模式,使用过mykey作为密钥,切换为加密模式c.init(Cipher.ENCRYPT_MODE, mykey);//打印在本函数中使用到的密钥System.out.println("正在进行DES的加密操作,使用的密钥为(16进制): "+ bytesToHex(mykey.getEncoded()));//对流fis进行加密CipherInputStream cis = new CipherInputStream(fis, c);byte[] buffer = new byte[1024];int temp;while((temp = cis.read(buffer))>0){fos.write(buffer,0,temp);}cis.close();fos.close();fis.close();}/*** 对文件进行解密* @throws Exception * @param destFile,解密的目标文件 * * **/public void decryptFile(String destFile) throws Exception{//密文的输入流InputStream fis = new FileInputStream(destFile);//切换为解密模式c.init(Cipher.DECRYPT_MODE, mykey);CipherInputStream cis = new CipherInputStream(fis, c);BufferedReader br = new BufferedReader(new InputStreamReader(cis));//将解密后内容打印到控制台,写入文件BufferedWriter bw = new BufferedWriter(new FileWriter("plain_text.txt"));String line = null;System.out.println("The decrypted plaintext is:\n");while((line = br.readLine())!= null){System.out.println(line);bw.write(line+"\n");}br.close();cis.close();fis.close();bw.close();}/** * @param args * @throws NoSuchPaddingException  * @throws NoSuchAlgorithmException  * @throws BadPaddingException  * @throws IllegalBlockSizeException  * @throws InvalidKeyException  */  public static void main(String[] args) throws Exception {  DESdemo de1 = new DESdemo();  String msg ="this is DES example.this is DES example.this is DES example.this is DES example.this is DES example.this is DES example.";  byte[] encontent = de1.Encrytor(msg);  byte[] decontent = de1.Decryptor(encontent);  System.out.println("明文是:" + msg);  System.out.println("加密后:" + new String(encontent));  System.out.println("解密后:" + new String(decontent));  //文件加密测试System.out.println("\n******************Test encrypt and decrypt for file*****************");String srcFile = "original_plaintext.txt";String destFile = "ciphertext.txt";de1.encryptFile(srcFile, destFile);de1.decryptFile(destFile);}
}

RSA加密解密源代码

package mimaExample;
//使用java自带的Base64编码需要1.8之后的jdk
import java.util.Base64;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.Signature;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;import javax.crypto.Cipher;/*** RSA demo* @author gushengwei* @version 1.0* @email mailgsw@163.com* * **/public class RSAdemo {/*** RSA最大解密密文大小*/private static final int MAX_DECRYPT_BLOCK = 128;//产生公私钥对并存入文件中,文件名变量为:publicKeyFile,privateKeyFileprotected void generateKeyPair(String publicKeyFile, String privateKeyFile) throws Exception{// KeyPairGenerator类用于生成公钥和私钥对,基于RSA算法生成对象KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");// 初始化密钥对生成器,密钥大小为1024位keyPairGen.initialize(1024);// 生成一个密钥对,保存在keyPair中KeyPair keyPair = keyPairGen.generateKeyPair();// 得到公钥RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic();// 得到私钥RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();//将公私钥分别写入文件中this.savePublicKey(publicKey,publicKeyFile);this.savePrivateKey(privateKey,privateKeyFile);}/*** 保存得到的公钥,采用了base64对公钥进行编码* **/public void savePublicKey(PublicKey pubkey,String publicKeyFile) throws IOException{//得到公钥字符串,这里采用base64对得到的大整数进行编码Base64.Encoder encoder = Base64.getEncoder();String pubkeyStr = encoder.encodeToString(pubkey.getEncoded());//写入文件System.out.println("public key is: "+pubkeyStr);FileWriter fw = new FileWriter(publicKeyFile);BufferedWriter bw = new BufferedWriter(fw);bw.write(pubkeyStr);bw.close();fw.close();}/*** 保存得到的私钥,采用了base64对公钥进行编码* **/public void savePrivateKey(PrivateKey prikey,String privateKeyFile)throws IOException{Base64.Encoder encoder = Base64.getEncoder();       String prikeyStr = encoder.encodeToString(prikey.getEncoded());//写入文件System.out.println("private key is: "+prikeyStr);FileWriter fw = new FileWriter(privateKeyFile);BufferedWriter bw = new BufferedWriter(fw);bw.write(prikeyStr);bw.close();fw.close();}/*** 读文件返回字符串* @throws IOException * **/public String readFile2String(String fileName) throws IOException{FileReader fr = new FileReader(fileName);BufferedReader br = new BufferedReader(fr);String line = br.readLine();//拼接字符串StringBuilder sb = new StringBuilder();while(line != null){sb.append(line);line = br.readLine();}String keyString = sb.toString();br.close();fr.close();return keyString;}/*** 从base64字符串中加载公钥* **/public RSAPublicKey loadPublicKey(String publicKeyStr) throws Exception{//首先将原来的base64编码还原成byte数组Base64.Decoder decoder = Base64.getDecoder();byte[] keyBuffer = decoder.decode(publicKeyStr);//从中获取公钥KeyFactory myKeyFactory = KeyFactory.getInstance("RSA");X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBuffer);RSAPublicKey pubkey = (RSAPublicKey) myKeyFactory.generatePublic(keySpec);return pubkey;}/*** 从base64字符串中加载私钥* **/public RSAPrivateKey loadPrivateKey(String privateKeyStr) throws Exception{//首先将原来的base64编码还原成byte数组Base64.Decoder decoder = Base64.getDecoder();byte[] keyBuffer = decoder.decode(privateKeyStr);//从中获取私钥KeyFactory myKeyFactory = KeyFactory.getInstance("RSA");PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(keyBuffer);RSAPrivateKey prikey = (RSAPrivateKey) myKeyFactory.generatePrivate(keySpec);return prikey;}/*** 使用公钥加密消息* * @param publicKey,公钥* @param srcBytes,待加密的字符串*/public byte[] encrypt(RSAPublicKey publicKey, byte[] srcBytes) throws Exception {if (publicKey != null) {// Cipher负责完成加密或解密工作,基于RSACipher cipher = Cipher.getInstance("RSA");// 根据公钥,对Cipher对象进行初始化cipher.init(Cipher.ENCRYPT_MODE, publicKey);byte[] resultBytes = cipher.doFinal(srcBytes);return resultBytes;}return null;}/*** 使用私钥解密消息* @param privateKey,私钥* @param srcBytes,输入的需要解密的字节数组*/public byte[] decrypt(RSAPrivateKey privateKey, byte[] srcBytes) throws Exception {if (privateKey != null) {// Cipher负责完成加密或解密工作,基于RSACipher cipher = Cipher.getInstance("RSA");// 根据公钥,对Cipher对象进行初始化cipher.init(Cipher.DECRYPT_MODE, privateKey);byte[] resultBytes = cipher.doFinal(srcBytes);return resultBytes;}return null;}/*** 使用rsa签名* 先使用sha做hash,对产生的hash进行签名* @param plainText,要签名的文本* @param privateKey,用于签名的私钥* **/public String sign(String plainText, PrivateKey privateKey) throws Exception {Signature privateSignature = Signature.getInstance("SHA256withRSA");privateSignature.initSign(privateKey);privateSignature.update(plainText.getBytes());byte[] signature = privateSignature.sign();//返回base64的编码的签名return Base64.getEncoder().encodeToString(signature);}/*** 验证签名* @param plainText,原文本* @param signature,需要验证的签名* @param publicKey,用于验证公钥* * @return True/False,返回布尔类型表示签名是否有效* **/public boolean verify(String plainText, String signature, PublicKey publicKey) throws Exception {Signature publicSignature = Signature.getInstance("SHA256withRSA");publicSignature.initVerify(publicKey);publicSignature.update(plainText.getBytes());byte[] signatureBytes = Base64.getDecoder().decode(signature);return publicSignature.verify(signatureBytes);}/*** @param args* 主函数,测试使用*/public static void main(String[] args) throws Exception {RSAdemo rsa = new RSAdemo();String msg = "www.suning.com/index.jsp";//产生公私钥对并将其存入文件中String publicKeyFile = "public_key.txt";String privateKeyFile = "private_key.txt";rsa.generateKeyPair(publicKeyFile, privateKeyFile);//从文件中加载公私钥对String pubkeyStr = rsa.readFile2String(publicKeyFile);String prikeyStr = rsa.readFile2String(privateKeyFile);RSAPublicKey publicKey = rsa.loadPublicKey(pubkeyStr);RSAPrivateKey privateKey = rsa.loadPrivateKey(prikeyStr);// 用公钥加密byte[] srcBytes = msg.getBytes();byte[] resultBytes = rsa.encrypt(publicKey, srcBytes);// 用私钥解密byte[] decBytes = rsa.decrypt(privateKey, resultBytes);// 打印输出的结果System.out.println("明文是:" + msg);System.out.println("加密后是:" + new String(resultBytes));System.out.println("解密后是:" + new String(decBytes));//用私钥签名String signStr = rsa.sign(msg, privateKey);System.out.println(msg + " 的签名结果为:\n" + signStr);//用公钥进行签名验证boolean verifyResult = rsa.verify(msg, signStr, publicKey);System.out.println("签名验证结果为; " + verifyResult);}
}

NewDESdemo和DESdemo的区别如下

使用到的类

密码学--文件安全传输相关推荐

  1. python+PyQt5实现文件安全传输

    实验目的 设计安全的信息传输工具,解决网络传输涉密文件过程中的安全性问题.安全的信息传输,涉及多个密码学知识点,在实验设计过程中,不断加深理解密码学基本概念和算法基础原理,并且能够锻炼独立的代码编写能 ...

  2. 四个特性,让这个信创文件安全传输软件备受客户青睐

    "信创"的全称是"信息技术应用创新产业 ",是目前的一项国家战略,也是当今形势下国家经济发展的新动能.发展信创是为了解决本质安全的问题. 信创产业发展已经成为经 ...

  3. 文件安全传输服务器,安全传输:从文件加载服务器证书

    如果两个文件都可以进行分组并转换为pkcs 12格式,则可以使用SecPKCS12Import方法. 但是SecPKCS12Import在根上下文中无法正常工作.我不知道这种不端行为的原因. OSSt ...

  4. 不经意传输协议-密码学

    不经意传输协议-密码学 不经意传输(oblivious transfer)是一个密码学协议,在这个协议中,消息发送者从一些待发送的消息中发送一条给接收者,但事后对发送了哪一条消息仍然oblivious ...

  5. 在网络隔离下实现文件传输交换,你的方式真的安全吗?

    随着企业对网络安全的重视程度提高.越来越多的企业在网络建设上进行了网络隔离.所谓网络隔离,即是指两个或两个以上的计算机或网络在断开连接的基础上,实现信息交换和资源共享.目前最常见的网络隔离方式,有以下 ...

  6. chewing的作业——数字信封实现文件传输

    文件安全传输系统设计作业 通信模式:端到端通信 数字信封:   对称密码优点是加解密运算非常快,适合处理大批量数据,但其密码的分发与管理比较复杂.而非对称密码算法的特点是公钥和私钥分离,非常适合密钥的 ...

  7. 密码学系列(三):区块链+密码学基础知识

    密码学系列(三):区块链+密码学基础知识 一.区块链的概念 区块链概述 区块链的特点 区块链变化 市场现状 二.区块链政策与标准 区块链的特点与发展 三.区块链的定义 区块链的价值 四.区块链开发语言 ...

  8. 密码学~~~数字信封

    #本文仅供参考有不足之处请指出 一.概括 数字信封是公钥密码体制在实际中的一个应用,是用加密技术来保证只有规定的特定收信人才能阅读通信的内容.数字信封的功能类似于普通信封,普通信封在法律的约束下保证只 ...

  9. java毕业设计——基于Java+sqlserver的通用安全模块设计与实现(毕业论文+程序源码)——安全模块

    基于Java+sqlserver的通用安全模块设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于Java+sqlserver的通用安全模块设计与实现,文章末尾附有本毕业设计的论文和源码下载地 ...

最新文章

  1. 计算机中的概念: 视图 VS 镜像
  2. 在Windows系统上安装Ruby On Rails
  3. python语言自学-如何自学python语言
  4. 从svn下载项目后build path为灰色
  5. UA MATH566 统计理论 QE练习题1
  6. mysql海量数据存储
  7. 二叉树的遍历(递归,非递归,Morris)
  8. 固定资产管理有关的计算机知识,计算机技术在固定资产管理中的具体应用.pdf...
  9. 3.3亿人都在用小程序,中国首次定义的互联网标准又有新进展
  10. 服饰贴图定制小程序V1.2.4安装更新一体包+小程序前端
  11. Winform GDI+ 绘图
  12. esp8266 rtos 开发环境 ubuntu_Ubuntu快速搭建C++开发环境(VS Code编辑器)
  13. ssm框架图片上传与显示_SSM在线考试系统
  14. 资深开发者告诉你“页游转手游”应注意的五大点
  15. 编译easymule 1.1.5
  16. Vim开发RubyOnRails 环境打造
  17. CSS 长度单位详细总结
  18. 实用现代汉语语法笔记
  19. SVN如何建立版本库
  20. 360校招笔试题总结4

热门文章

  1. 微软市值重回万亿美元,FB 在区块链、VR领域多方出击... | 一周热闻回顾
  2. 计算机体系结构:量化研究方法:第5版
  3. 《全民英雄》和《火影来了OL》强化引导分析
  4. 物联网APP开发简介
  5. 科技巨头纷纷入局“元宇宙”,《头号玩家》预言了互联网的未来?
  6. 如何阅读Spring源码
  7. 程序人生 - 防疫期间能不能点外卖
  8. 华硕天选2wifi不见了
  9. css做喇叭动画,使用CSS3模拟音箱(音响)声音扩展动画效果
  10. 【预测模型-ElM分类】基于松鼠算法优化ElM神经网络实现数据分类附matlab代码