本文转载自:
http://blog.csdn.net/micaixiaoduanku/article/details/9699711
全部示例代码:
public class Main {
public static void main(String[] args) throws NoSuchAlgorithmException, UnsupportedEncodingException {
//-------------------加密过程---------------------------------
//产生一个key,需要关联一种“DES”算法
KeyGenerator keyGenerator = KeyGenerator.getInstance("DES");
SecretKey deskey = keyGenerator.generateKey();
//需要加密的info
String info = "12345678";
//输出加密前的密文内容
System.out.println(""+info);
//产生一个Random
SecureRandom sr = new SecureRandom();
byte[] cipherByteEncrypt = null;
try {
Cipher c1 = Cipher.getInstance("DES");
c1.init(Cipher.ENCRYPT_MODE, deskey, sr);
//生成密文
cipherByteEncrypt = c1.doFinal(info.getBytes());
} catch (Exception e) {
e.printStackTrace();
}
//输出加密后的密文内容
System.out.println(""+new String(cipherByteEncrypt,"ISO-8859-1"));
//-------------------解密过程-----------------------------------
//产生一个Random
sr = new SecureRandom();
byte[] cipherByteDecrypt = null;
try {
Cipher c1 = Cipher.getInstance("DES");
c1.init(Cipher.DECRYPT_MODE, deskey, sr);
//解析密文
cipherByteDecrypt = c1.doFinal(cipherByteEncrypt);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(""+new String(cipherByteDecrypt,"ISO-8859-1"));
}
}
补充一个问题:
为什么在代码中会有使用ISO-8859-1来编码.
看如下代码:
bytebytes[] = new byte[] { 50, 0, -1, 28, -24 };
String string = new String(bytes);
byte[] ret = string.getBytes();
查看ret的数据发现是50, 0, -17, -65, -67, 28, -17, -65, -67,发现数据并不是原来的数据。
而使用如下代码就可以得到原来的数据:
bytebytes[] = new byte[] { 50, 0, -1, 28, -24 };
StringisoString = new String(bytes, "ISO-8859-1");
byte[] isoret = isoString.getBytes("ISO-8859-1");
这是为什么呢?原因是第一种方法默认是用UTF-8编码来生成String的,用System.getProperty("sun.jnu.encoding")可以得到Android默认编码是UTF-8。UTF-8是可变长度的编码,原来的字节数组就被改变了。而ISO8859-1通常叫做Latin-1,Latin-1包括了书写所有西方欧洲语言不可缺少的附加字符,其中 0~127的字符与ASCII码相同,它是单字节的编码方式,这样第二种方式生成的String里的字节数组就跟原来的字节数组一样。在new String使用其他编码如GBK,GB2312的话一样也会导致字节数组发生变化,因此要想获取String里单字节数组,就应该使用iso8859-1编码。
分享到:
相关推荐
本文将深入探讨Java中常用的加密技术,包括基本的单向加密算法、对称加密、非对称加密以及数字证书等相关知识点。 #### 二、基本概念 **单向加密算法**是一种加密过程不可逆的算法,即一旦数据被加密,就不能被...
### Java加密技术详解:以MD5为例 在Java中,加密技术是确保数据安全和完整性的关键工具之一。本文将深入探讨Java中的加密技术,特别是MD5加密算法,通过实例和代码片段,帮助读者理解其工作原理及如何在实际项目中...
Java加密技术
因此,运用加密技术保护Java源代码成为了一项重要的课题。 ### Java源代码加密的重要性 Java源代码加密主要涉及两个层面:一是源代码本身的安全,二是编译后的字节码(.class文件)的安全。对于源代码,加密可以...
Java加密技术(一) 关键字: java 加密基础, base64, md5, mac, sha, 单向加密 。。。。。。。。。。。。。。
这些Java加密技术的理解和应用对于任何Java开发者来说都是必备的技能,特别是在涉及用户隐私、数据安全和网络通信的项目中。通过学习和实践这些技术,开发者能够更好地保护数据,防止信息被窃取或篡改。
同态加密是一种高级的加密技术,它允许对加密数据进行计算,而无需先解密。在同态加密下,操作的结果仍然是加密的,但与原始未加密数据进行相同的操作会得到相同的结果。这一特性使得同态加密在数据隐私保护、云计算...
哈希函数也是加密技术中的关键部分,例如MD5和SHA系列。它们可以将任意大小的数据映射为固定长度的摘要,但不能逆向还原原始数据,常用于验证数据完整性和密码存储。Java的`java.security.MessageDigest`类提供了...
Java项目中的加密技术是保障信息安全的关键手段,涵盖了多种加密解密算法和证书体系。下面将详细介绍这些技术: 1. **基本的单向加密算法**: - **BASE64**:其实是一种编码方式,而非真正的加密算法。它将任意...
总之,Java加密技术提供了丰富的工具和算法,可以帮助开发者构建安全的应用程序。然而,随着技术的发展,加密算法的安全性也需要不断更新,以抵御新的攻击手段。在设计系统时,应考虑最新的安全标准和最佳实践,确保...
然而,我们可以基于这个主题,深入探讨Java中的文本加密技术,包括其背景、原理以及常见加密算法的实现。 ### Java中的文字加密 在计算机科学中,加密是保护数据安全的关键技术之一,它通过将可读信息转换为看似...
在Java编程中,加密技术是确保信息安全的关键组成部分。本文将探讨几种常见的加密算法,包括单向加密和对称及非对称加密算法。首先,我们来看基础的单向加密算法,如BASE64、MD5、SHA和HMAC。 **BASE64** 是一种...
Java RSA加密技术是一种广泛应用于网络通信安全中的非对称加密算法,主要特点是公钥和私钥成对出现,其中公钥用于加密,私钥用于解密。这种加密方式的安全性较高,因为即使加密数据被截获,没有相应的私钥也无法解密...
以上便是Java加密技术中的一些核心知识点,从基本的单向加密到复杂的非对称加密算法,以及数字签名和数字证书的应用,都是为了确保数据的安全和完整。随着技术的发展,加密技术也在不断进步,Java提供了丰富的API...
在Java编程领域,文件加密和打包是常见的需求,特别是在...通过以上分析,我们可以看出"JAVA文件加密打包实例"是一个涵盖了Java文件加密和打包核心技术的项目,对于学习和实践数据安全和文件管理有着重要的参考价值。
Java加密狗读取例子主要涉及的是在Java编程环境中与硬件加密设备进行交互的技术。加密狗是一种硬件安全模块,用于保护软件免受非法复制和逆向工程。在这个特定的例子中,我们关注的是ET199型号的加密狗,它通常被...
在JAVA中,我们通常使用对称加密和非对称加密两种方法。对称加密使用相同的密钥进行加密和解密,如DES(Data Encryption Standard)和AES(Advanced Encryption Standard)。非对称加密则使用一对公钥和私钥,公钥...
总之,Java中的MD5加密技术为数据提供了基础的安全保障,但鉴于其已知的弱点,应结合其他更安全的加密算法或机制,如SHA系列,或者使用更先进的密码学技术。在实际应用中,还需要考虑合规性和安全策略,确保数据的...