
对称加密算法是具有成熟技术的较早加密算法. 在对称加密算法中,数据发送方使用特殊的加密算法将明文(原始数据)和加密密钥(mi yue)一起处理,以使其成为复杂的加密密文并发送出去. 接收者收到密文后,如果他想解释原始文本,则需要使用加密密钥和相同算法的逆算法对密文进行解密,以便将其恢复为可读的明文. 在对称加密算法中,仅使用一个密钥. 发送方和接收方都使用此密钥对数据进行加密和解密,这要求解密方事先知道加密密钥.
简单的Java加密算法是:
严格来说,BASE是一种编码格式,而不是加密算法
MD(消息摘要算法,消息摘要算法)
SHA(安全哈希算法)
HMAC(哈希消息验证码,哈希消息验证码)
第一个. 基础

Base是用于在Internet上传输位字节代码的最常见的编码方法之一. 您可以查看RFC〜RFC,它具有MIME的详细规范. 基本编码可用于在HTTP环境中传输更长的标识信息. 例如,在Hibernate Java Persistence系统中,Base用于将长的唯一标识符(通常为-UUID)编码为字符串,该字符串用作HTTP形式和HTTP GET URL中的参数. 在其他应用程序中,通常需要将二进制数据编码为适合放置在URL中的形式(包括隐藏的形式字段). 此时,使用Base编码是不可读的,也就是说,人眼不会直接看到编码后的数据. (来源百度百科)
Java实现代码:
package com.cn.单向加密;
import sun.misc.BASEDecoder;
import sun.misc.BASEEncoder;
/*
BASE的加密解密是双向的,可以求反解.
BASEEncoder和BASEDecoder是非官方JDK实现类。虽然可以在JDK里能找到并使用,但是在API里查不到。
JRE 中 sun 和 com.sun 开头包的类都是未被文档化的,他们属于 java, javax 类库的基础,其中的实现大多数与底层平台有关,
一般来说是不推荐使用的。
BASE 严格地说,属于编码格式,而非加密算法
主要就是BASEEncoder、BASEDecoder两个类,我们只需要知道使用对应的方法即可。
另,BASE加密后产生的字节位数是的倍数,如果不够位数以=符号填充。
BASE
按照RFC的定义,Base被定义为:Base内容传送编码被设计用来把任意序列的位字节描述为一种不易被人直接识别的形式。
(The Base Content-Transfer-Encoding is designed to represent arbitrary sequences of octets in a form that need not be humanly readable.)
常见于邮件、http加密,截取http信息,你就会发现登录操作的用户名、密码字段通过BASE加密的。
*/
public class BASE {
/**
* BASE解密
*
* @param key
* @return
* @throws Exception
*/
public static byte[] decryptBASE(String key) throws Exception {
return (new BASEDecoder()).decodeBuffer(key);
}
/**
* BASE加密
*
* @param key
* @return
* @throws Exception
*/
public static String encryptBASE(byte[] key) throws Exception {
return (new BASEEncoder()).encodeBuffer(key);
}
public static void main(String[] args) {
String str="";
try {
String result= BASE.encryptBASE(str.getBytes());
System.out.println("result=====加密数据=========="+result);
byte result[]= BASE.decryptBASE(result);
String str=new String(result);
System.out.println("str========解密数据========"+str);
} catch (Exception e) {
e.printStackTrace();
}
}
}
第二种. MD
MD代表消息摘要算法,用于确保完整且一致的信息传输. 它是计算机广泛使用的哈希算法之一(也是翻译摘要算法,哈希算法),而主流编程语言通常都有MD实现. 将数据(例如汉字)计算为另一个固定长度的值是哈希算法的基本原理. MD的前身是MD,MD和MD. 它广泛用于加密和解密技术中,并经常用于文件验证中. 校验?无论文件有多大,它都可以在MD之后生成唯一的MD值. 例如,当前的ISO验证是所有MD验证. 如何使用?当然,在将ISO传递给MD之后会生成MD的值. 通常,下载linux-ISO的朋友可以在下载链接旁边看到MD字符串. 用于验证文件是否一致.
Java实现:
package com.cn.单向加密;
import java.math.BigInteger;
import java.security.MessageDigest;
/*
MD(Message Digest algorithm ,信息摘要算法)
通常我们不直接使用上述MD加密。通常将MD产生的字节数组交给BASE再加密一把,得到相应的字符串
Digest:汇编
*/
public class MD {
public static final String KEY_MD = "MD";
public static String getResult(String inputStr)
{
System.out.println("=======加密前的数据:"+inputStr);
BigInteger bigInteger=null;
try {
MessageDigest md = MessageDigest.getInstance(KEY_MD);
byte[] inputData = inputStr.getBytes();
md.update(inputData);
bigInteger = new BigInteger(md.digest());
} catch (Exception e) {e.printStackTrace();}
System.out.println("MD加密后:" + bigInteger.toString());
return bigInteger.toString();
}
public static void main(String args[])
{
try {
String inputStr = "简单加密";
getResult(inputStr);
} catch (Exception e) {
e.printStackTrace();
}
}
}

MD算法具有以下特点:
可压缩性: 对于任何长度的数据,计算出的MD值长度都是固定的.
,易于计算: 很容易从原始数据计算MD值.
,抗修改性: 对原始数据的任何更改,即使仅修改了一个字节,所获得的MD值也大不相同.
,抗冲突性弱: 了解原始数据及其MD值,很难找到具有相同MD值的数据(即伪数据).
,强大的抗冲突性: 很难找到两个不同的数据以使它们具有相同的MD值.
MD的作用是允许在使用数字签名软件对私钥进行签名之前将大容量信息“压缩”为秘密格式(即将任意长度的字节字符串转换为十六进制数字). 一定长度的字符串). 除了MD之外,sha-,RIPEMD和Haval在其中更著名.

第三. SHA
安全哈希算法(Secure Hash Algorithm)主要适用于数字签名标准(Digital Signature Standard DSS)中定义的数字签名算法(Digital Signature Algorithm DSA). 对于长度小于^位的消息,SHA会生成一位消息摘要. 经过加密专家多年的开发和完善,该算法已经变得越来越完善,得到了广泛的应用. 该算法的思想是接收一段纯文本,然后以不可逆的方式将其转换为(通常较小的)密文,也可以简单地理解为采用一串输入代码(称为预映射)或信息),以及将它们转换为具有短长度和固定位数的输出序列的过程,即哈希值(也称为信息摘要或信息认证码). 哈希函数值可以说是纯文本的“指纹”或“摘要”,因此哈希值的数字签名可以看作是纯文本的数字签名.
Java实现:
package com.cn.单向加密;
import java.math.BigInteger;
import java.security.MessageDigest;
/*
SHA(Secure Hash Algorithm,安全散列算法),数字签名等密码学应用中重要的工具,
被广泛地应用于电子商务等信息安全领域。虽然,SHA与MD通过碰撞法都被破解了,
但是SHA仍然是公认的安全加密算法,较之MD更为安全*/
public class SHA {
public static final String KEY_SHA = "SHA";
public static String getResult(String inputStr)
{
BigInteger sha =null;
System.out.println("=======加密前的数据:"+inputStr);
byte[] inputData = inputStr.getBytes();
try {
MessageDigest messageDigest = MessageDigest.getInstance(KEY_SHA);
messageDigest.update(inputData);
sha = new BigInteger(messageDigest.digest());
System.out.println("SHA加密后:" + sha.toString());
} catch (Exception e) {e.printStackTrace();}
return sha.toString();
}
public static void main(String args[])
{
try {
String inputStr = "简单加密";
getResult(inputStr);
} catch (Exception e) {
e.printStackTrace();
}
}
}
SHA-和MD的比较
因为两者都是从MD派生的,所以SHA-和MD彼此非常相似. 相应地,它们的强度和其他特性也相似,但也存在以下差异:
抵御暴力攻击的安全性: 最重要和重要的区别在于哪种加密算法最安全,SHA-digest比MD摘要更长. 使用强制技术,生成任何消息以使其摘要等于给定消息摘要的难度对于MD而言为一个数量级,对于SHA-而言为一个数量级. 这样,SHA-可以抵抗强力攻击.
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shumachanpin/article-210878-1.html
你们没注意罢了
那就是统一之时
你说1公里入侵也行