加密系列—Java中常用的加密方法(JDK)

  加密,是以某种特殊的算法改变原有的信息数据,使得未授权的用户即使获得了已加密的信息,但因不知解密的方法,仍然无法了解信息的内容。大体上分为双向加密单向加密 ,而双向加密又分为对称加密非对称加密 (有些资料将加密直接分为对称加密和非对称加密)。

  双向加密大体意思就是明文加密后形成密文,可以通过算法还原成明文。而单向加密只是对信息进行了摘要计算,不能通过算法生成明文,单向加密从严格意思上说不能算是加密的一种,应该算是摘要算法吧。具体区分可以参考:

  1. 加解密详解
  2. 常用加密算法的Java实现(一)——单向加密算法MD5和SHA
  3. 常用加密算法的Java实现总结(二)——对称加密算法DES、3DES和AES

一、双向加密

1、对称加密

  采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。需要对加密和解密使用相同密钥的加密算法。由于其速度,对称性加密通常在消息发送方需要加密大量数据时使用。对称性加密也称为密钥加密。所谓对称,就是采用这种加密方法的双方使用方式用同样的密钥进行加密和解密。密钥是控制加密及解密过程的指令。

  算法是一组规则,规定如何进行加密和解密。因此对称式加密本身不是安全的。   
  常用的对称加密有:DES、IDEA、RC2、RC4、SKIPJACK、RC5、AES算法等。

1)DES

  DES算法为密码体制中的对称密码体制,又被成为美国数据加密标准,是1972年美国IBM公司研制的 对称密码体制加密算法。 明文按64位进行分组, 密钥长64位,密钥事实上是56位参与DES运算(第8、16、24、32、40、48、56、64位是校验位, 使得每个密钥都有奇数个1)分组后的明文组和56位的密钥按位替代或交换的方法形成密文组的加密方法。

具体实现:加密系列——DES加密 解密算法

2)3DES

  3DES又称Triple DES,是DES加密算法的一种模式,它使用3条56位的密钥对3DES
数据进行三次加密。数据加密标准(DES)是美国的一种由来已久的加密标准,它使用对称密钥加密法,并于1981年被ANSI组织规范为ANSI X.3.92。DES使用56位密钥和密码块的方法,而在密码块的方法中,文本被分成64位大小的文本块然后再进行加密。比起最初的DES,3DES更为 安全。

  3DES(即Triple DES)是DES向AES过渡的加密算法(1999年,NIST将3-DES指定为过渡的加密标准),是DES的一个更安全的变形。它以DES为基本模块,通过组合分组方法设计出分组加密算法,其具体实现如下:

  设Ek()和Dk()代表DES算法的加密和解密过程,K代表DES算法使用的密钥,P代表明文,C代表密文, 这样:

  • 3DES加密过程为:C=Ek3(Dk2(Ek1(P)))
  • 3DES解密过程为:P=Dk1((EK2(Dk3(C)))

具体实现:加密系列——3DES加密 解密算法

3)AES

  AES 密码学中的高级加密标准(Advanced Encryption Standard,AES),又称 高级加密标准Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的 甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。该算法为比利时密码学家Joan Daemen和Vincent Rijmen所设计,结合两位作者的名字,以Rijndael之命名之,投稿高级加密标准的甄选流程。(Rijdael的发音近于 “Rhinedoll”。)

具体实现:待写

2、非对称加密

  1976年,美国学者Dime和Henman为解决信息公开传送和密钥管理问题,提出一种新的密钥交换协议,允许在不安全的媒体上的通讯双方交换 信息,安全地达成一致的密钥,这就是“公开密钥系统”。相对于“对称加密算法”这种方法也叫做“非对称加密算法”。 与对称加密算法不同,非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。

1)RSA

  RSA 公钥加密算法是1977年由Ron Rivest、Adi Shamirh和LenAdleman在(美国麻省理工学院)开发的。RSA取名来自开发他们三者的名字。RSA是目前最有影响力的公钥加密算法,它能够 抵抗到目前为止已知的所有密码攻击,已被ISO推荐为公钥数据加密标准。RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对 其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。

具体实现:暂时未用到非对称加密,待后续再写吧

2)DSA

  Digital Signature Algorithm (DSA)是Schnorr和ElGamal签名算法的变种,被美国NIST作为DSS(DigitalSignature Standard)。(感觉有点复杂,没有附代码)
详见http://63938525.iteye.com/blog/1051565

二、单向加密(信息摘要)

Java一般需要获取对象MessageDigest来实现单项加密(信息摘要)。

1)MD5

  MD5 即Message-Digest Algorithm 5(信息-摘要算法 5),用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。将数据(如汉字)运算为 另一固定长度值,是杂凑算法的基础原理,MD5的前身有MD2、MD3和MD4。MD5的作用是让大容量信息在用数字签名软件签署私人密钥前被”压缩”成 一种保密的格式(就是把一个任意长度的字节串变换成一定长的十六进制数字串)。

  除了MD5以外,其中比较有名的还有sha-1、RIPEMD以及Haval等。

具体实现:加密系列——MD5加密算法

2)SHA

  SHA 是一种数据加密算法,该算法经过加密专家多年来的发展和改进已日益完善,现在已成为公认的最安全的散列算法之一,并被广泛使用。该算法的思想是接收一段明文,然后以一种不可逆的方式将它转换成一段(通常更小)密文,也可以简单的理解为取一串输入码(称为预映射或信息),并把它们转化为长度较短、位数固定的 输出序列即散列值(也称为信息摘要或信息认证代码)的过程。散列函数值可以说时对明文的一种“指纹”或是“摘要”所以对散列值的数字签名就可以视为对此明 文的数字签名。

具体实现:加密系列——SHA加密算法

3)SHA-1和MD5的比较

因为二者均由MD4导出,SHA-1和MD5彼此很相似。相应的,他们的强度和其他特性也是相似,但还有以下几点不同:

  1. 对强行攻击的安全性:最显著和最重要的区别是SHA-1摘要比MD5摘要长32位。使用强行技术,产生任何一个报文使其摘要等于给定报摘要的难度对MD5是2^128数量级的操作,而对SHA-1则是2^160数量级的操作。这样,SHA-1对强行攻击有更大的强度;

  2. 对密码分析的安全性:由于MD5的设计,易受密码分析的攻击,SHA-1显得不易受这样的攻击;

  3. 速度:在相同的硬件上,SHA-1的运行速度比MD5慢。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JDK1.5,Apache POI库可以使用,但是加密API可能不可用,因为JDK1.5使用的是旧版的加密算法,而POI库加密API可能需要更新的算法。因此,您可能需要使用其他第三方库来实现Excel文件的加密。 例如,您可以使用JExcel API库来对Excel文件进行加密。以下是一个简单的示例: ```java import java.io.File; import java.io.IOException; import jxl.CellView; import jxl.Workbook; import jxl.format.UnderlineStyle; import jxl.write.Label; import jxl.write.WritableCellFormat; import jxl.write.WritableFont; import jxl.write.WritableSheet; import jxl.write.WritableWorkbook; import jxl.write.WriteException; import jxl.write.biff.RowsExceededException; public class ExcelEncryptionExample { public static void main(String[] args) throws IOException, WriteException { // 创建一个新的Excel工作簿 WritableWorkbook workbook = Workbook.createWorkbook(new File("encrypted.xls")); // 创建一个新的工作表 WritableSheet sheet = workbook.createSheet("Sheet1", 0); // 向工作表添加一些数据和格式化 // 创建一个加密字体 WritableFont font = new WritableFont(WritableFont.ARIAL, 10, WritableFont.BOLD, false, UnderlineStyle.NO_UNDERLINE); // 创建一个加密单元格格式 WritableCellFormat cellFormat = new WritableCellFormat(font); // 设置加密密码 sheet.getSettings().setPassword("password"); // 将数据和格式写入工作表 Label label = new Label(0, 0, "Hello World!", cellFormat); sheet.addCell(label); // 调整单元格视图 CellView cellView = new CellView(); cellView.setAutosize(true); sheet.setColumnView(0, cellView); // 关闭工作簿 workbook.write(); workbook.close(); } } ``` 在上面的示例,我们使用JExcel API库创建了一个新的Excel工作簿,并使用WritableSheet和WritableCellFormat对象将其加密。在这个例子,我们使用了sheet.getSettings().setPassword("password")方法来设置加密密码。 最后,我们将加密后的工作簿写入一个文件,并关闭工作簿。现在,生成的Excel文件将受到密码保护,只有知道密码的人才能打开和编辑文件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值