- 浏览: 140727 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
sparksun007:
不是你粗心,是作者应该更详细地备注说明下!
BufferedInputFile---thinking in java书上的一个问题??? -
coosummer:
推荐使用http://buttoncssgenerator.c ...
css制作button 带有滤镜效果 -
concideration:
thank you!
BufferedInputFile---thinking in java书上的一个问题??? -
lvlcl:
me too 。。。
BufferedInputFile---thinking in java书上的一个问题??? -
asi2012:
thingking in java就是经常使用很多他自定义的封 ...
BufferedInputFile---thinking in java书上的一个问题???
前段时间有个客户提交了一个需求,说我们的系统中,subscriber的密码是以明文方式存在系统中的,不安全(汗颜啊……)。因此我们要做点改进,把subscriber的密码加一下密。借着机会,我也学习学习一下MD5算法(再次汗颜……)。
MD5(Message-Digest Algorithm 5)加密算法是一种不可逆的算法,也即,即使源程序和算法描述可见,也无法将一个MD5值恢复到加密前的值。
Message-Digest指的是字节串的Hash变换。这种变换只与字节的值有关,与字符集和编码方式无关。它将任意长字节串变换成一个128bit的 整数。相同的字节串计算出的MD5值总是相同的;不同的字节串计算出的MD5值是肯定不相同的。因此,MD5加密算法在日常生活中有许多应用。例如在很多系统和软件中,登录时所用的用户密码是以MD5值的方式保存的。用户注册时,将其设置的密码计算为MD5值并保存在数据库中。用户登录时,系统根据登录者输入的用户名计算出MD5值,与数据库中保存的该用户密码的MD5值进行比较,如果相同,才允许用户登录。
MD5的另一个应用就是防止文件被“篡改”。如果一个文件被修改过,那么修改之前对文件计算出的MD5值和修改之后的MD5值是肯定不相同的。在实际开发过程中,developer们有时也会遇到MD5的应用。比如在version1,developer deliver了一个包module.rpm。然后我进行了修改,然后打包又生成了一个module.rpm,但是我想确认一下我现在做的rpm包是否是我做了修改后生成的包(有的时候也的确会出现这类问题)。我就需要比较一下前一个版本和后一个版本的module.rpm的MD5值。
为了完成工作,我添加了一个工具类HashMD5,提供方法来对输入参数进行加密。
import java.security.*;
/**
* @author Sam
* Hash the input password, using MD5 algorithm.
*/
public class HashMD5 {
public final static char hexChar[] = {
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
public static String convertBytesToString(byte[] bytes) {
StringBuffer result = new StringBuffer();
for (int i=0; i<bytes.length; i++) {
result.append(convertByteToHex(bytes[i]));
}
return result.toString();
}
private static String convertByteToHex(byte b) {
int n = b;
int d1 = 0;
int d2 = 0;
if (n<0){
n = 256 + n;
}
d1 = n/16;
d2 = n%16;
StringBuffer str = new StringBuffer();
str.append(hexChar[d1]).append(hexChar[d2]);
return str.toString();
}
public static String Encryption(String inputpassword) {
String encryptedPassword = null;
try {
byte[] strTmp = inputpassword.getBytes();
MessageDigest mdTmp = MessageDigest.getInstance("MD5");
mdTmp.update(strTmp);
byte[] md = mdTmp.digest();
encryptedPassword = convertBytesToString (md);
return new String(encryptedPassword);
}
catch (Exception e){
return null;
}
}
}
出处:http://blog.csdn.net/lazy_tiger/archive/2007/11/20/1895050.aspxRsa 加密和解密算法:
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import javax.crypto.Cipher;
public class RSAEncrypt {
public static void main(String[] args) {
try {
RSAEncrypt encrypt = new RSAEncrypt();
String encryptText = "ganlisxn1104";
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");
keyPairGen.initialize(1024);
KeyPair keyPair = keyPairGen.generateKeyPair();
// Generate keys
RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();
RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic();
byte[] e = encrypt.encrypt(publicKey,encryptText.getBytes());
byte[] de = encrypt.decrypt(privateKey, e);
System.out.println("加密:"+encrypt.bytesToString(e));
System.out.println("解密:"+encrypt.bytesToString(de));
} catch (Exception e) {
e.printStackTrace();
}
}
/** */
/**
* Change byte array to String.
*
* @return byte[]
*/
protected String bytesToString(byte[] encrytpByte) {
String result = "";
for (Byte bytes : encrytpByte) {
result += (char) bytes.intValue();
}
return result;
}
/** */
/**
* Encrypt String.
*
* @return byte[]
*/
protected byte[] encrypt(RSAPublicKey publicKey, byte[] obj) {
if (publicKey != null) {
try {
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
return cipher.doFinal(obj);
} catch (Exception e) {
e.printStackTrace();
}
}
return null;
}
/** */
/**
* Basic decrypt method
*
* @return byte[]
*/
protected byte[] decrypt(RSAPrivateKey privateKey, byte[] obj) {
if (privateKey != null) {
try {
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, privateKey);
return cipher.doFinal(obj);
} catch (Exception e) {
e.printStackTrace();
}
}
return null;
}
}
三:3DES 加密解密:测试过了支持中文,import java.security.Key;
import java.security.SecureRandom;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
/**
*
* 使用DES加密与解密,可对byte[],String类型进行加密与解密 密文可使用String,byte[]存储.
*
* 方法: void getKey(String strKey)从strKey的字条生成一个Key
*
* String getEncString(String strMing)对strMing进行加密,返回String密文 String
* getDesString(String strMi)对strMin进行解密,返回String明文
*
* byte[] getEncCode(byte[] byteS)byte[]型的加密 byte[] getDesCode(byte[]
* byteD)byte[]型的解密
*/
public class ThreeDES {
Key key;
/**
* 根据参数生成KEY
*
* @param strKey
*/
public void getKey(String strKey) {
try {
KeyGenerator _generator = KeyGenerator.getInstance("DES");
_generator.init(new SecureRandom(strKey.getBytes()));
this.key = _generator.generateKey();
_generator = null;
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 加密String明文输入,String密文输出
*
* @param strMing
* @return
*/
public String getEncString(String strMing) {
byte[] byteMi = null;
byte[] byteMing = null;
String strMi = "";
BASE64Encoder base64en = new BASE64Encoder();
try {
byteMing = strMing.getBytes("UTF8");
byteMi = this.getEncCode(byteMing);
strMi = base64en.encode(byteMi);
} catch (Exception e) {
e.printStackTrace();
} finally {
base64en = null;
byteMing = null;
byteMi = null;
}
return strMi;
}
/**
* 解密 以String密文输入,String明文输出
*
* @param strMi
* @return
*/
public String getDesString(String strMi) {
BASE64Decoder base64De = new BASE64Decoder();
byte[] byteMing = null;
byte[] byteMi = null;
String strMing = "";
try {
byteMi = base64De.decodeBuffer(strMi);
byteMing = this.getDesCode(byteMi);
strMing = new String(byteMing, "UTF8");
} catch (Exception e) {
e.printStackTrace();
} finally {
base64De = null;
byteMing = null;
byteMi = null;
}
return strMing;
}
/**
* 加密以byte[]明文输入,byte[]密文输出
*
* @param byteS
* @return
*/
private byte[] getEncCode(byte[] byteS) {
byte[] byteFina = null;
Cipher cipher;
try {
cipher = Cipher.getInstance("DES");
cipher.init(Cipher.ENCRYPT_MODE, key);
byteFina = cipher.doFinal(byteS);
} catch (Exception e) {
e.printStackTrace();
} finally {
cipher = null;
}
return byteFina;
}
/**
* 解密以byte[]密文输入,以byte[]明文输出
*
* @param byteD
* @return
*/
private byte[] getDesCode(byte[] byteD) {
Cipher cipher;
byte[] byteFina = null;
try {
cipher = Cipher.getInstance("DES");
cipher.init(Cipher.DECRYPT_MODE, key);
byteFina = cipher.doFinal(byteD);
} catch (Exception e) {
e.printStackTrace();
} finally {
cipher = null;
}
return byteFina;
}
public static void main(String[] args) {
ThreeDES des = new ThreeDES();// 实例化一个对像
des.getKey("fenglingcompany");// 生成密匙
String strEnc = des.getEncString("fengye666666666");// 加密字符串,返回String的密文
System.out.println(strEnc);
String strDes = des.getDesString(strEnc);// 把String 类型的密文解密
System.out.println(strDes);
}
}
发表评论
-
JS十进制,十六进制,八进制,二进制他们的转换总结
2009-06-13 17:38 5358十进制转换成其他进制 ... -
下载弹出提示框
2009-05-15 20:28 1387有个朋友问我下载弹出提示框的写法,具体如下: 出现 ... -
JS读取xml
2009-05-14 18:20 1819<!DOCTYPE html PUBLIC ... -
CSS参考样式
2009-04-20 14:09 878http://www.52css.com/css_templa ... -
类的访问权限
2009-04-14 11:25 857public:作用域为所有类。protected:作用域为当前 ... -
IO模式详解URL
2009-04-08 17:50 1110http://www.builder.com.cn/2008/ ... -
正则验证16进制
2009-04-01 17:55 3749今天我写了个正则表达式的16进制的 表达式 var hex = ... -
sql exists 总结
2009-02-25 09:38 1052select t1.code as bossgroupid ... -
js 对页面table数据排序
2009-02-13 18:41 1876function ieOrFireFox(ob) { ... -
JS 生成Word ,excel 例子
2009-02-10 17:46 2745<HTML> <HEAD> ... -
innerHTML,outerHTML,innerText,outerText区别
2009-02-10 17:36 1076innerHTML获取标签内的HTMLouterHTML获取标 ... -
css制作button 带有滤镜效果
2009-01-19 09:42 1673.btn { BORDER-RIGHT: ... -
java IO 经验总结
2009-01-18 13:48 1465IO 一直让我很困惑,下面我就IO 读取文件总体 总结下 In ... -
BufferedInputFile---thinking in java书上的一个问题???
2009-01-18 11:59 6691呵呵,我也发发现这个问题,刚开始我也很困惑,BufferedI ... -
web 网页材料制作的好去处
2008-12-08 15:37 826http://www.cool80.com/gif/index ... -
开发工作空间映射for windows operationsystem
2008-12-03 09:57 981SUBST M: D:\workspace -
创建dblink
2008-11-07 18:29 2479创建dblink create database link O ... -
time
2008-11-07 18:03 912import java.text.ParseExceptio ... -
正则表达式总结
2008-11-02 19:23 842一 正则表达式的正文。 正则表达式中使用了特殊符号。下面我就将 ... -
有效数据截取,Java对象
2008-10-28 17:34 926例如: BigDecimal b = new BigDeci ...
相关推荐
无论是公钥加密私钥解密还是私钥加密公钥解密,都需要对RSA算法有深入理解,并能灵活运用OpenSSL库提供的API。这样的工具或代码对于Delphi开发者来说,是确保数据安全、实现安全通信的重要资源,适用于D7到XE10等多...
MD5、DES和RSA是信息安全领域中常用的三种加密算法,每种都有其特定的应用场景和特点。 MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,它能够将任意长度的数据转换为一个固定长度的摘要,通常为128...
总的来说,RSA算法在C# .NET中的实现涉及到了密钥对的生成、公钥加密、私钥解密等核心操作,理解这些概念对于开发安全的应用程序至关重要。在实际应用中,还需要考虑数据完整性校验、密钥管理等额外的安全措施。通过...
RSA算法是一种非对称加密算法,由Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出,是目前广泛应用于网络安全领域的一种核心加密技术。它的主要特点是拥有两个密钥:公钥和私钥。公钥可以公开,用于加密信息;...
在Winform应用中,我们可以创建一个简单的用户界面,包括输入框、按钮和文本框,实现加密和解密功能。以下步骤概括了创建这样的应用程序的基本流程: 1. 设计UI:添加两个文本框(分别用于输入明文和显示密文)、两...
RSA加密解密算法是密码学中一种常用的加密算法,以 Ron Rivest、Adi Shamir 和 Leonard Adleman 三人命名。该算法基于大数分解问题的困难性,使用公钥加密和私钥解密的方式来保护数据的安全。 该算法的基本原理是:...
私钥加密和公钥解密是RSA算法的核心特性,允许发送者使用接收者的公钥来加密数据,而只有持有对应私钥的接收者才能解密。在这个特定的案例中,`MyRSA.cs` 文件提供了一个实现,它使用了 `System.Numerics.BigInteger...
MD5加密是一种常用的密码学哈希函数,用于确保数据的完整性和_authentication。MD5算法是RSA Data Security公司在1992年发布的,用于生成一个128位的哈希值。MD5加密广泛应用于各种领域,包括数据存储、网络传输和...
本文详细介绍了Java实现的RSA加密解密算法,包括密钥对生成、公钥和私钥的使用、加密和解密、密钥文件的生成等知识点。这些知识点对于Java开发者来说非常重要,可以帮助他们更好地理解和实现RSA加密解密算法。
在Unity引擎中,RSA(Rivest-Shamir-...通过理解RSA的工作原理和Unity中相应的C#实现,开发者可以在游戏中实现安全的数据交换,保护敏感信息,如用户密码、游戏成就或购买记录。同时,记得定期更新密钥以增加安全性。
"RSA加解密及公钥密生成工具"这个文件可能是包含上述功能的Delphi源码文件或者一个简单的GUI应用程序,它提供了一个用户友好的界面,使得用户能够轻松地生成RSA密钥对,并进行加密和解密操作。 通过学习和理解这段...
MD5和RSA是信息安全领域中两种重要的加密算法,它们各自有着独特的特性和应用场景。MD5主要用作消息摘要,而RSA则是一种非对称加密算法,适用于数据加密和数字签名。 MD5(Message-Digest Algorithm 5)是一种广泛...
RSA加密解密算法是公开密钥密码体制的一种典型代表,由Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出,因此得名RSA。这种算法基于大整数因子分解的困难性,即找到两个大素数的乘积很容易,但将该乘积分解回...
本资源提供了RSA加密解密的源码,适用于学习和理解RSA算法的工作原理及其实现。 首先,RSA算法的核心原理基于大数的因式分解困难性。它由三位科学家Rivest、Shamir和Adleman于1977年提出,因此得名RSA。该算法包括...
这个名为"RSA.rar"的压缩包文件包含了使用Python实现RSA算法的代码,以及一个图形用户界面(GUI)用于用户友好地操作加密和解密过程。 首先,我们来看"key.py"文件,它负责生成RSA密钥对,即公钥和私钥。RSA算法的...
Python Django框架是一个强大的后端开发工具,而RSA(Rivest-Shamir-Adleman)则是一种广泛应用的非对称加密算法,常用于数据加密和数字签名。在这个场景中,我们将讨论如何在Django应用中实现RSA加密和解密,以便于...
"C# RSA加密与JAVA解密,实现相互通信"的主题聚焦于如何利用RSA公钥/私钥加密算法在C#和Java两个不同的编程环境中实现安全的数据交换。RSA是一种非对称加密算法,它使用一对密钥——公钥和私钥,公钥用于加密,私钥...
10. **源代码与实践**:提供的RAR文件可能包含RSA加密和解密的源代码及可执行文件,这对于学习密码学理论和实践非常有价值。通过阅读和运行这些代码,可以深入理解RSA的工作机制。 总之,RSA加密算法是现代密码学的...
在这个示例中,"RSA加密"的压缩包可能包含了Java和C#的完整源代码,用于演示如何在两者之间实现RSA公钥加密和私钥解密的过程。开发者可以通过运行这些示例代码,理解并应用RSA加密解密技术到自己的项目中。
RSA加密解密是一种广泛应用于网络安全领域的非对称加密算法,由Ron Rivest、Adi Shamir和Leonard Adleman三位科学家在1977年提出,因此得名RSA。这种算法基于大整数因子分解的困难性,使得只有持有正确密钥的人才能...