java不对称加密
Java加密方式有多种,包括对称加密、非对称加密、散列加密等。
1. 对称加密:
对称加密是指加密和解密使用相同密钥的加密方式。在Java中,常见的对称加密算法有AES、DES、3DES等。其中,AES算法是DES的替代品,具有更高的安全性。这些算法提供了不同级别的加密强度,适用于保护敏感信息。
2. 非对称加密:
非对称加密使用一对密钥,一个用于加密,另一个用于解密。在Java中,常见的非对称加密算法有RSA、DSA、ECC等。RSA算法是最常用的非对称加密算法之一,它利用公钥进行加密,私钥进行解密,适用于安全通信和数字签名。
3. 散列加密(哈希加密):
散列加密是一种将任意长度的输入转换为固定长度输出的加密方式。在Java中,常见的散列加密算法有MD5、SHA-1、SHA-256等。这些算法主要用于生成数据的唯一标识符(哈希值),适用于密码存储、文件校验等场景。需要注意的是,虽然MD5在某些情况下存在安全隐患,但SHA系列算法提供了更高的安全性。
以上三种加密方式在Java中都有广泛的应用,根据具体需求选择合适的加密方式至关重要。同时,为了确保加密的安全性,还需要注意密钥的管理和保护,避免密钥泄露带来的安全风险。
B. Java鐢熸垚RSA闱炲圭О鍨嫔姞瀵嗙殑鍏阍ュ拰绉侀挜
銆銆闱炲圭О鍨嫔姞瀵嗛潪甯搁傚悎澶氢釜瀹㈡埛绔鍜屾湇锷″櫒涔嬮棿镄勭桦瘑阃氲 瀹㈡埛绔浣跨敤钖屼竴涓鍏阍ュ皢鏄庢枃锷犲瘑 钥岃繖涓鍏阍ヤ笉鑳介嗗悜镄勮В瀵 瀵嗘枃鍙戦佸埌链嶅姟鍣ㄥ悗链夋湇锷″櫒绔鐢ㄧ侀挜瑙e瘑 杩欐牱灏卞仛鍒颁简鏄庢枃镄勫姞瀵嗕紶阃
銆銆闱炲圭О鍨嫔姞瀵嗕篃链夊畠鍏埚ぉ镄勭己镣 锷犲瘑 瑙e瘑阃熷害鎱㈠埗绾︿简瀹幂殑鍙戞尌 濡傛灉浣犳湁澶ч噺镄勬枃瀛楅渶瑕佸姞瀵嗕紶阃 寤鸿浣犻氲繃闱炲圭О鍨嫔姞瀵嗘潵鎶婂圭О鍨 瀵嗛挜 鍒嗗彂鍒板㈡埛绔 鍙婃椂镟存柊瀵圭О鍨 瀵嗛挜
銆銆import java io *;
銆銆import java security *;
銆銆import javax crypto *;
銆銆import javax crypto spec *;
銆銆/**
銆銆* <p>Title: RSA闱炲圭О鍨嫔姞瀵嗙殑鍏阍ュ拰绉侀挜</p>
銆銆* <p>Description: </p>
銆銆* <p>Copyright: Copyright (c) </p>
銆銆* <p>Company: </p>
銆銆* @author not attributable
銆銆* @version
銆銆*/
銆銆public class KeyRSA {
銆銆private KeyPairGenerator kpg = null;
銆銆private KeyPair kp = null;
銆銆private PublicKey public_key = null;
銆銆private PrivateKey private_key = null;
銆銆private FileOutputStream public_file_out = null;
銆銆private ObjectOutputStream public_object_out = null;
銆銆private FileOutputStream private_file_out = null;
銆銆private ObjectOutputStream private_object_out = null;
銆銆/**
銆銆* 鏋勯犲嚱鏁
銆銆* @param in 鎸囧畾瀵嗗宠闀垮害锛埚彇鍊艰寖锲 锝 锛
銆銆* @throws NoSuchAlgorithmException 寮傚父
銆銆*/
銆銆public KeyRSA(int in String address) throws NoSuchAlgorithmException FileNotFoundException IOException
銆銆{
銆銆kpg = KeyPairGenerator getInstance( RSA ); //鍒涘缓 瀵嗗宠瀵 鐢熸垚鍣
銆銆kpg initialize(in); //鎸囧畾瀵嗗宠闀垮害锛埚彇鍊艰寖锲 锝 锛
銆銆kp = kpg genKeyPair(); //鐢熸垚 瀵嗗宠瀵 鍏朵腑鍖呭惈镌涓涓鍏鍖椤拰涓涓绉佸宠镄勪俊鎭
銆銆public_key = kp getPublic(); //銮峰缑鍏鍖
銆銆private_key = kp getPrivate(); //銮峰缑绉佸宠
銆銆//淇濆瓨鍏鍖
銆銆public_file_out = new FileOutputStream(address + /public_key dat );
銆銆public_object_out = new ObjectOutputStream(public_file_out);
銆銆public_object_out writeObject(public_key);
銆銆//淇濆瓨绉佸宠
銆銆private_file_out = new FileOutputStream(address + /private_key dat );
銆銆private_object_out = new ObjectOutputStream(private_file_out);
銆銆private_object_out writeObject(private_key);
銆銆}
銆銆public static void main(String[] args) {
銆銆try {
銆銆System out println( 绉佸宠鍜屽叕鍖欎缭瀛桦埌C鐩树笅镄勬枃浠朵腑 );
銆銆new KeyRSA( c:/ );
銆銆}
銆銆catch (IOException ex) {
銆銆}
銆銆catch (NoSuchAlgorithmException ex) {
銆銆}
銆銆}
lishixin/Article/program/Java/hx/201311/26592
C. Java 加密解密的方法都有哪些
加密解密并非java才有的,所有编程语言都有加密和解密。
目前的加密解密主要可分为以下2大类:
对称秘钥加密:如DES算法,3DES算法,TDEA算法,Blowfish算法,RC5算法,IDEA算法等。其主要特点是加密方和解密方都有同一个密码,加密方和解密方可以使用秘钥任意加密解密。
非对称密码加密:这种加密方式加密方仅有加密秘钥,对加密后的密文无法反向解密,解密方仅有解密秘钥,无法对明文进行加密。
另外还有一些摘要算法,比如MD5和HASH此类算法不可逆,但经常用来作为确认字段或者对一些重要匹配信息签名防止明文内容被修改。
D. 开发中常见的加密方式及应用
开发中常见的加密方式及应用
一、base64
简述:Base64是网络上最常见的用于传输8Bit 字节码 的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。所有的数据都能被编码为并只用65个字符就能表示的文本文件。( 65字符:A~Z a~z 0~9 + / = )编码后的数据~=编码前数据的4/3,会大1/3左右(图片转化为base64格式会比原图大一些)。
应用:Base64编码是从二进制到字符的过程,可用于在 HTTP 环境下传递较长的标识信息。例如,在Java Persistence系统Hibernate中,就采用了Base64来将一个较长的唯一 标识符 (一般为128-bit的UUID)编码为一个字符串,用作HTTP 表单 和HTTP GET URL中的参数。在其他应用程序中,也常常需要把二进制 数据编码 为适合放在URL(包括隐藏 表单域 )中的形式。此时,采用Base64编码具有不可读性,需要解码后才能阅读。
命令行进行Base64编码和解码
编码:base64 123.png -o 123.txt
解码:base64 123.txt -o test.png -D Base64编码的原理
原理:
1)将所有字符转化为ASCII码;
2)将ASCII码转化为8位二进制;
3)将二进制3个归成一组(不足3个在后边补0)共24位,再拆分成4组,每组6位;
4)统一在6位二进制前补两个0凑足8位;
5)将补0后的二进制转为十进制;
6)从Base64编码表获取十进制对应的Base64编码;
Base64编码的说明:
a.转换的时候,将三个byte的数据,先后放入一个24bit的缓冲区中,先来的byte占高位。
b.数据不足3byte的话,于缓冲区中剩下的bit用0补足。然后,每次取出6个bit,按照其值选择查表选择对应的字符作为编码后的输出。
c.不断进行,直到全部输入数据转换完成。
d.如果最后剩下两个输入数据,在编码结果后加1个“=”;
e.如果最后剩下一个输入数据,编码结果后加2个“=”;
f.如果没有剩下任何数据,就什么都不要加,这样才可以保证资料还原的正确性。
二、HASH加密/单向散列函数
简述:Hash算法特别的地方在于它是一种单向算法,用户可以通过Hash算法对目标信息生成一段特定长度(32个字符)的唯一的Hash值,却不能通过这个Hash值重新获得目标信息。对用相同数据,加密之后的密文相同。 常见的Hash算法有MD5和SHA。由于加密结果固定,所以基本上原始的哈希加密已经不再安全,于是衍生出了加盐的方式。加盐:先对原始数据拼接固定的字符串再进行MD5加密。
特点:
1) 加密 后密文的长度是定长(32个字符的密文)的
2)如果明文不一样,那么散列后的结果一定不一样
3)如果明文一样,那么加密后的密文一定一样(对相同数据加密,加密后的密文一样)
4)所有的加密算法是公开的
5)不可以逆推反算(不能根据密文推算出明文),但是可以暴力 破解 ,碰撞监测
原理:MD5消息摘要算法,属Hash算法一类。MD5算法对输入任意长度的消息进行运行,产生一个128位的消息摘要。
1)数据填充
对消息进行数据填充,使消息的长度对512取模得448,设消息长度为X,即满足X mod 512=448。根据此公式得出需要填充的数据长度。
填充方法:在消息后面进行填充,填充第一位为1,其余为0。
2)添加信息长度
在第一步结果之后再填充上原消息的长度,可用来进行的存储长度为64位。如果消息长度大于264,则只使用其低64位的值,即(消息长度 对264取模)。
在此步骤进行完毕后,最终消息长度就是512的整数倍。
3)数据处理
准备需要用到的数据:
4个常数:A = 0x67452301, B = 0x0EFCDAB89, C = 0x98BADCFE, D = 0x10325476;
4个函数:F(X,Y,Z)=(X & Y) | ((~X) & Z);G(X,Y,Z)=(X & Z) | (Y & (~Z));H(X,Y,Z)=X ^ Y ^ Z;I(X,Y,Z)=Y ^ (X | (~Z));
把消息分以512位为一分组进行处理,每一个分组进行4轮变换,以上面所说4个常数为起始变量进行计算,重新输出4个变量,以这4个变量再进行下一分组的运算,如果已经是最后一个分组,则这4个变量为最后的结果,即MD5值。
三、对称加密
经典算法:
1)DES数据加密标准
DES算法的入口参数有三个:Key、Data、Mode。其中Key为8个字节共64位,是DES算法的工作密钥;Data也为8个字节64位,是要被加密或被解密的数据;Mode为DES的工作方式,有两种:加密或解密。
DES算法是这样工作的:如Mode为加密,则用Key去把数据Data进行加密, 生成Data的密码形式(64位)作为DES的输出结果;如Mode为解密,则用Key去把密码形式的数据Data解密,还原为Data的明码形式(64位)作为DES的输出结果。在通信网络的两端,双方约定一致的Key,在通信的源点用Key对核心数据进行DES加密,然后以密码形式在公共通信网(如电话网)中传输到通信网络的终点,数据到达目的地后,用同样的Key对密码数据进行解密,便再现了明码形式的核心数据。这样,便保证了核心数据(如PIN、MAC等)在公共通信网中传输的安全性和可靠性。
2)3DES使用3个密钥,对消息进行(密钥1·加密)+(密钥2·解密)+(密钥3·加密)
3)AES高级加密标准
如图,加密/解密使用相同的密码,并且是可逆的
四、非对称加密
特点:
1)使用公钥加密,使用私钥解密
2)公钥是公开的,私钥保密
3)加密处理安全,但是性能极差
经典算法RSA:
1)RSA原理
(1)求N,准备两个质数p和q,N = p x q
(2)求L,L是p-1和q-1的最小公倍数。L = lcm(p-1,q-1)
(3)求E,E和L的最大公约数为1(E和L互质)
(4)求D,E x D mode L = 1
五、数字签名
原理以及应用场景:
1)数字签名的应用场景
需要严格验证发送方身份信息情况
2)数字签名原理
(1)客户端处理
对"消息"进行HASH得到"消息摘要"
发送方使用自己的私钥对"消息摘要"加密(数字签名)
把数字签名附着在"报文"的末尾一起发送给接收方
(2)服务端处理
对"消息" HASH得到"报文摘要"
使用公钥对"数字签名"解密
对结果进行匹配
六、数字证书
简单说明:
证书和驾照很相似,里面记有姓名、组织、地址等个人信息,以及属于此人的公钥,并有认证机构施加数字签名,只要看到公钥证书,我们就可以知道认证机构认证该公钥的确属于此人。
数字证书的内容:
1)公钥
2)认证机构的数字签名
证书的生成步骤:
1)生成私钥openssl genrsa -out private.pem 1024
2)创建证书请求openssl req -new -key private.pem -out rsacert.csr
3)生成证书并签名,有效期10年openssl x509 -req -days 3650 -in rsacert.csr -signkey private.pem -out rsacert.crt
4)将PEM格式文件转换成DER格式openssl x509 -outform der -in rsacert.crt -out rsacert.der
5)导出P12文件openssl pkcs12 -export -out p.p12 -inkey private.pem -in rsacert.crt
iOS开发中的注意点:
1)在iOS开发中,不能直接使用PEM格式的证书,因为其内部进行了Base64编码,应该使用的是DER的证书,是二进制格式的;
2)OpenSSL默认生成的都是PEM格式的证书。
七、https
HTTPS和HTTP的区别:
超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息。HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此HTTP协议不适合传输一些敏感信息,比如信用卡号、密码等。
为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS。为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。
HTTPS和HTTP的区别主要为以下四点:
1)https协议需要到ca申请证书,一般免费证书很少,需要交费。
2)http是 超文本传输协议 ,信息是明文传输,https则是具有 安全性 的 ssl 加密传输协议。
3)http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
4)http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的 网络协议 ,比http协议安全。
5)SSL:Secure Sockets Layer安全套接字层;用数据加密(Encryption)技术,可确保数据在网络上传输过程中不会被截取及窃听。目前一般通用之规格为40 bit之安全标准,美国则已推出128 bit之更高安全标准,但限制出境。只要3.0版本以上之I.E.或Netscape 浏览器 即可支持SSL。目前版本为3.0。SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。SSL协议可分为两层:SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。
E. javaweb关于客户端密码md5加密后被抓包工具抓取的问题
你描述的问题有点像CSRF攻击,而且你提出来的办法有一定的局限性,比如说如果黑客是同一个局域网的人,这种判断ip地址的方法可能会失效。
其实只要使用https就不存在这种问题,就算是中间被人截取了加密的密码,然后用加密的密码提交表单,最后与后台数据库匹配成功也没有用。因为匹配成功之后,服务端给黑客发送的信息也是经过加密的,但是黑客是不知道密钥,不知道如何对这段信息进行解密,所以不会登陆成功的。这把密钥只有客户端和服务端知道,所有题主担心的问题用https能够解决,这是我的一点见解。