声明:本文只是自学过程中,记录自己不会的知识点的摘要,如果想详细学习JavaWeb,请到孤傲苍狼博客学习,JavaWeb学习点此跳转

本文链接:https://www.cnblogs.com/xdp-gacl/p/3744053.html

1、对称加密

  采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。
  需要对加密和解密使用相同密钥的加密算法。由于其速度快,对称性加密通常在消息发送方需要加密大量数据时使用。对称性加密也称为密钥加密。
  所谓对称,就是采用这种加密方法的双方使用方式用同样的密钥进行加密和解密。密钥是控制加密及解密过程的指令。算法是一组规则,规定如何进行加密和解密。
  加密的安全性不仅取决于加密算法本身,密钥管理的安全性更是重要。因为加密和解密都使用同一个密钥,如何把密钥安全地传递到解密者手上就成了必须要解决的问题。
  常用的对称加密有:DES、IDEA、RC2、RC4、SKIPJACK、RC5、AES算法等

2、非对称加密

  非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。 非对称加密算法实现机密信息交换的基本过程是:甲方生成一对密钥并将其中的一把作为公用密钥向其它方公开;得到该公用密钥的乙方使用该密钥对机密信息进行加密后再发送给甲方;甲方再用自己保存的另一把专用密钥对加密后的信息进行解密。另一方面,甲方可以使用乙方的公钥对机密信息进行签名后再发送给乙方;乙方再用自己的私匙对数据进行验签。

非对称加密工作原理

  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的私钥

  发送方使用接收方的公钥对数据加密,而接收方则使用自己的私钥解密,这样,信息就可以安全无误地到达目的地了,即使被第三方截获,由于没有相应的私钥,也无法进行解密。通过数字的手段保证加密过程是一个不可逆过程,即只有用私有密钥才能解密。

  非对称性加密依然没有解决数据传输的安全性问题,比如A想向B发数据,B首先生成一对密钥(公钥和私钥),然后将公钥发给A,A拿到B发给他的公钥有就可以使用公钥加密数据后发给B,然而在B公钥发送给A的这个过程中,很有可能会被第三方C截获,C截获到B的公钥后,也使用B的公钥加密数据,然后发给B,B接收到数据后就晕了,因为搞不清楚接收到的数据到底是A发的还是C发的,这是其中一个问题,另一个问题就是,C截获到B发的公钥后,C可以自己生成一对密钥(公钥和私钥),然后发给A,A拿到公钥后就以为是B发给他的,然后就使用公钥加密数据发给B,发送给B的过程中被C截获下来,由于A是用C发给他的公钥加密数据的,而C有私钥,因此就可以解密A加密过后的内容了,而B接收到A发给他的数据后反而解不开了,因为数据是用C的公钥加密的,B没有C的私钥,所以就无法解密。所以,非对称性加密存在一个问题:A想向B发数据,A如何确定拿到的公钥一定是B发的呢?那么如何解决这个问题呢?只能靠一个第三方机构(CA机构,即证书授权中心(Certificate Authority ),或称证书授权机构)来担保。A想向B发数据,B首先将公钥发给CA机构,CA机构拿到B的公钥后跑到B的家里问:这是你发的公钥吗?B确认过后说是:没错,是我发的!那么此时CA机构就会为B的公钥做担保,生成一份数字证书给B,数字证书包含了CA的担保认证签名和B的公钥,B拿到CA的这份数字证书后,就发给A,A拿到数字证书后,看到上面有CA的签名,就可以确定当前拿到的公钥是B发的,那么就可以放心大胆地使用公钥加密数据,然后发给B了。

对称加密DES代码(C#):

     /// <summary>
/// DES加密方法
/// </summary>
/// <param name="pToEncrypt"></param>
/// <returns></returns>
public static string DESEncrypt(string pToEncrypt)
{
return DESEncrypt(pToEncrypt, "dulyDESY").Replace("+", "|"); ;//默认key
}
/// <summary>
/// DES解密方法
/// </summary>
/// <param name="pToDecrypt"></param>
/// <param name="sKey"></param>
/// <returns></returns>
public static string DESDecrypt(string pToDecrypt)
{
return DESDecrypt(pToDecrypt, "dulyDESY").Replace("|","+");
}
/// <param name="pToEncrypt">要加密的字符串。</param>
/// <param name="sKey">密钥,且必须为8位。</param>
/// <returns>以Base64格式返回的加密字符串。</returns>
private static string DESEncrypt(string pToEncrypt, string sKey)
{
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
byte[] inputByteArray = Encoding.UTF8.GetBytes(pToEncrypt);
des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
System.IO.MemoryStream ms = new System.IO.MemoryStream();
CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
cs.Write(inputByteArray, , inputByteArray.Length);
cs.FlushFinalBlock();
cs.Close();
string str = Convert.ToBase64String(ms.ToArray());
ms.Close();
return str;
} /// <param name="pToDecrypt">要解密的以Base64</param>
/// <param name="sKey">密钥,且必须为8位。</param>
/// <returns>已解密的字符串。</returns>
private static string DESDecrypt(string pToDecrypt, string sKey)
{
byte[] inputByteArray = Convert.FromBase64String(pToDecrypt);
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
System.IO.MemoryStream ms = new System.IO.MemoryStream();
CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);
cs.Write(inputByteArray, , inputByteArray.Length);
cs.FlushFinalBlock();
cs.Close();
string str = Encoding.UTF8.GetString(ms.ToArray());
ms.Close();
return str;
}

javaweb学习1——加密的更多相关文章

  1. JavaWeb学习总结(三)——Tomcat服务器学习和使用(二) 包含https 非对称秘钥 NB

    JavaWeb学习总结(三)--Tomcat服务器学习和使用(二) 一.打包JavaWeb应用 在Java中,使用"jar"命令来对将JavaWeb应用打包成一个War包,jar命 ...

  2. JAVAWeb学习总结(3)

    JavaWeb学习总结(三)——Tomcat服务器学习和使用(二) 一.打包JavaWeb应用 在Java中,使用"jar"命令来对将JavaWeb应用打包成一个War包,jar命 ...

  3. JAVAWEB学习

    http://www.cnblogs.com/xdp-gacl/p/3744053.html JavaWeb学习总结(三)——Tomcat服务器学习和使用(二)

  4. JavaWeb学习总结-01 JavaWeb开发入门

    一 基本概念 1 Web开发的相关知识 Web,表示网页的意思,它用于表示Internet主机上供外界访问的资源. Internet上供外界访问的Web资源分为: 静态web资源(如html 页面): ...

  5. JavaWeb学习总结-04 Servlet 学习和使用

    一 Servlet 1 Servlet概念 Servlet时运行在服务器端的Java程序. Servlet的框架核心是 javax.servlet.Servlet 接口. 所有自定义的Servlet都 ...

  6. JavaWeb学习总结(一)——JavaWeb开发入门

    http://www.cnblogs.com/xdp-gacl/p/3729033.html 只为成功找方法,不为失败找借口! JavaWeb学习总结(一)--JavaWeb开发入门 一.基本概念 1 ...

  7. javaweb学习总结(六)——Servlet开发(二)

    一.ServletConfig讲解 1.1.配置Servlet初始化参数 在Servlet的配置文件web.xml中,可以使用一个或多个<init-param>标签为servlet配置一些 ...

  8. javaweb学习之Servlet开发(二)

    javaweb学习总结(六)--Servlet开发(二) 一.ServletConfig讲解 1.1.配置Servlet初始化参数 在Servlet的配置文件web.xml中,可以使用一个或多个< ...

  9. JavaWeb学习之Servlet(二)----Servlet的生命周期、继承结构、修改Servlet模板

    [声明] 欢迎转载,但请保留文章原始出处→_→ 文章来源:http://www.cnblogs.com/smyhvae/p/4140466.html 一.http协议回顾: 在上一篇文章中:JavaW ...

随机推荐

  1. 对于socket发送数据时是否要加锁及write read的阻塞非阻塞

    偶尔讨论到了socket发送数据时是否应该加锁的问题,就在网上查了一下,下面是大神陈硕的答案 对于 UDP,多线程读写同一个 socket 不用加锁,不过更好的做法是每个线程有自己的 socket,避 ...

  2. 【cs231n】图像分类-Linear Classification线性分类

    [学习自CS231n课程] 转载请注明出处:http://www.cnblogs.com/GraceSkyer/p/8824876.html 之前介绍了图像分类问题.图像分类的任务,就是从已有的固定分 ...

  3. BZOJ2281:[SDOI2011]黑白棋(博弈论,组合数学,DP)

    Description 小A和小B又想到了一个新的游戏. 这个游戏是在一个1*n的棋盘上进行的,棋盘上有k个棋子,一半是黑色,一半是白色. 最左边是白色棋子,最右边是黑色棋子,相邻的棋子颜色不同. 小 ...

  4. BZOJ4517:[SDOI2016]排列计数(组合数学,错排公式)

    Description 求有多少种长度为 n 的序列 A,满足以下条件: 1 ~ n 这 n 个数在序列中各出现了一次 若第 i 个数 A[i] 的值为 i,则称 i 是稳定的.序列恰好有 m 个数是 ...

  5. 检查oracle用户默认密码的账户

    1. 检查使用默认用户密码的账号 --11g 通过数据字典SYS.DEFAULT_PWD$或视图DBA_USERS_WITH_DEFPWD select u.username, u.account_s ...

  6. linux增加自己的可执行目录 $PATH

    Linux中有三种方法可以添加用户的路径到系统路径PATH, 以添加 /etc/apache/bin 为例: 方法一: 直接在命令行中输入: #PATH=$PATH:/etc/apache/bin 这 ...

  7. 20155314 2016-2017-2 《Java程序设计》实验二 Java面向对象程序设计

    20155314 2016-2017-2 <Java程序设计>实验二 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UM ...

  8. springboot activiti 整合项目框架源码 shiro 安全框架 druid windows10风格

     官网:www.fhadmin.org  此项目为Springboot工作流版本 windows 风格,浏览器访问操作使用,非桌面应用程序. 1.代码生成器: [正反双向](单表.主表.明细表.树形表 ...

  9. koa2学习笔记02 - 给koa2添加系统日志 —— node日志管理模块log4js

    前言 没有日志系统的后台应用是没有灵魂的, 平时工作中每次我们遇到接口报错的时候, 都会叫后台的童鞋看下怎么回事, 这时后台的童鞋都会不慌不忙的打开一个骚骚的黑窗口. 一串噼里啪啦的命令输进去, 哐哐 ...

  10. Ubuntu安装ss

    安装环境:ubuntu 16.04 (推荐使用此版本-2019年3月) 本文假设读者已经拥有一台vps. 安装ss 首先通过终端以root身份登录vps $ ssh root@[IP Address] ...