
您好,
<一> MD5加密算法:
消息摘要算法第五版(Message Digest Algorithm),是一种单向加密算法,只能加密、无法解密。然而MD5加密算法已经被中国山东大学王小云教授成功破译,但是在安全性要求不高的场景下,MD5加密算法仍然具有应用价值。
1 创建md5对象:
<pre name="code" class="java">MessageDigest md5 = MessageDigestgetInstance("md5");
2 进行加密 *** 作:
byte[] cipherData = md5digest(plainTextgetBytes());
3 将其中的每个字节转成十六进制字符串:byte类型的数据最高位是符号位,通过和0xff进行与 *** 作,转换为int类型的正整数。
String toHexStr = IntegertoHexString(cipher & 0xff);
4 如果该正数小于16(长度为1个字符),前面拼接0占位:确保最后生成的是32位字符串。
builderappend(toHexStrlength() == 1 "0" + toHexStr : toHexStr);
5加密转换之后的字符串为:c0bb4f54f1d8b14caf6fe1069e5f93ad
6 完整的MD5算法应用如下所示:
/
功能简述: 测试MD5单向加密
@throws Exception
/
@Test
public void test01() throws Exception {
String plainText = "Hello , world !";
MessageDigest md5 = MessageDigestgetInstance("md5");
byte[] cipherData = md5digest(plainTextgetBytes());
StringBuilder builder = new StringBuilder();
for(byte cipher : cipherData) {
String toHexStr = IntegertoHexString(cipher & 0xff);
builderappend(toHexStrlength() == 1 "0" + toHexStr : toHexStr);
}
Systemoutprintln(buildertoString());
//c0bb4f54f1d8b14caf6fe1069e5f93ad
}
<二> 使用BASE64进行加密/解密:
使用BASE64算法通常用作对二进制数据进行加密,加密之后的数据不易被肉眼识别。严格来说,经过BASE64加密的数据其实没有安全性可言,因为它的加密解密算法都是公开的,典型的防菜鸟不防程序猿的呀。经过标准的BASE64算法加密后的数据,通常包含/、+、=等特殊符号,不适合作为url参数传递,幸运的是Apache的Commons Codec模块提供了对BASE64的进一步封装。 (参见最后一部分的说明)
1使用BASE64加密:
BASE64Encoder encoder = new BASE64Encoder();
String cipherText = encoderencode(plainTextgetBytes());
2使用BASE64解密:
BASE64Decoder decoder = new BASE64Decoder();
plainText = new String(decoderdecodeBuffer(cipherText));
3 完整代码示例:
/
功能简述: 使用BASE64进行双向加密/解密
@throws Exception
/
@Test
public void test02() throws Exception {
BASE64Encoder encoder = new BASE64Encoder();
BASE64Decoder decoder = new BASE64Decoder();
String plainText = "Hello , world !";
String cipherText = encoderencode(plainTextgetBytes());
Systemoutprintln("cipherText : " + cipherText);
//cipherText : SGVsbG8gLCB3b3JsZCAh
Systemoutprintln("plainText : " +
new String(decoderdecodeBuffer(cipherText)));
//plainText : Hello , world !
}
<三> 使用DES对称加密/解密:
数据加密标准算法(Data Encryption Standard),和BASE64最明显的区别就是有一个工作密钥,该密钥既用于加密、也用于解密,并且要求密钥是一个长度至少大于8位的字符串。使用DES加密、解密的核心是确保工作密钥的安全性。
1根据key生成密钥:
DESKeySpec keySpec = new DESKeySpec(keygetBytes());
SecretKeyFactory keyFactory = SecretKeyFactorygetInstance("des");
SecretKey secretKey = keyFactorygenerateSecret(keySpec);
2加密 *** 作:
Cipher cipher = CiphergetInstance("des");
cipherinit(CipherENCRYPT_MODE, secretKey, new SecureRandom());
byte[] cipherData = cipherdoFinal(plainTextgetBytes());
3为了便于观察生成的加密数据,使用BASE64再次加密:
String cipherText = new BASE64Encoder()encode(cipherData);
生成密文如下:PtRYi3sp7TOR69UrKEIicA==
4解密 *** 作:
cipherinit(CipherDECRYPT_MODE, secretKey, new SecureRandom());
byte[] plainData = cipherdoFinal(cipherData);
String plainText = new String(plainData);
5 完整的代码demo:
/
功能简述: 使用DES对称加密/解密
@throws Exception
/
@Test
public void test03() throws Exception {
String plainText = "Hello , world !";
String key = "12345678"; //要求key至少长度为8个字符
SecureRandom random = new SecureRandom();
DESKeySpec keySpec = new DESKeySpec(keygetBytes());
SecretKeyFactory keyFactory = SecretKeyFactorygetInstance("des");
SecretKey secretKey = keyFactorygenerateSecret(keySpec);
Cipher cipher = CiphergetInstance("des");
cipherinit(CipherENCRYPT_MODE, secretKey, random);
byte[] cipherData = cipherdoFinal(plainTextgetBytes());
Systemoutprintln("cipherText : " + new BASE64Encoder()encode(cipherData));
//PtRYi3sp7TOR69UrKEIicA==
cipherinit(CipherDECRYPT_MODE, secretKey, random);
byte[] plainData = cipherdoFinal(cipherData);
Systemoutprintln("plainText : " + new String(plainData));
//Hello , world !
}
<四> 使用RSA非对称加密/解密:
RSA算法是非对称加密算法的典型代表,既能加密、又能解密。和对称加密算法比如DES的明显区别在于用于加密、解密的密钥是不同的。使用RSA算法,只要密钥足够长(一般要求1024bit),加密的信息是不能被破解的。用户通过>
超经典的冷笑话!
1 师,站起来回答这个问题。 29,老师,我不会。 师,你自己说,不会该怎么办? 29,坐下。
2 期中考前。生,老师,这题会不会考? 师,我怎么知道? 生,这么没水准的题目,我敢说一定不会考! 师,谁说的!我敢说期中考填充就有这么一题!
3 老师要学生造一个有“糖”字的句子。 小华造句说,我正喝奶茶。 老师奇道,那 ‘糖’在哪里?小华,在奶茶里!
4 某日考试。 小辉,你考得如何? 小战,我交白卷,你呢? 小辉,我也是耶,糟了!老师会不会说我们互相抄袭?
5 上病理学时,有很多学生打瞌睡,教授于是发脾气了,对于真正死亡的时间,医学界一直争论,究竟是脑部停止活动时算是死亡,还是心脏停止时算死亡。但如果是前者,我便不得不宣布:这班学生大多死了。
6 小明是一个刚进小学读书的新生。第一次期中考的成绩单发下来后,小明的爸爸对他说:儿子,希望以后不要每次看到你的名次,就知道你们班有几个人好吗?
7 甲:何谓三生不幸? 乙:生理,生统,生化都当了! 甲:请问师承何派? 乙:在下乃五当派,每考必当五科。
8 经济学教授在上课时说道:同学们,外劳对我们的影响很大,你们猜哪 一国的外劳赚走最多钱?是泰劳、越劳、菲劳,还是…… 某生抢先回答:麦当劳!
9 某一法语学习班的招生说明有一条这么写着:如果你听了一课之后发现不喜欢这课程,那你可以要求退回你的学费。但是,你必须用法语说。
10 老师:为何考这么烂? 小丸:眼镜度数不够…… 小叶:我脖子扭伤。 小芳:前面同学个子太高。 小蓝:隔壁同学用铅笔,我看不清楚。
11 一条狗在街上闲逛,看见橱窗里一张告示:招聘文员。须会打字,懂计算机,精通两种语言。均等机会。 那条狗就进去申请,但是被拒绝了。经理说:我不能雇一条狗在里做事经理说。狗不服气,指着告示上均等机会几字。经理没法,叹了口气问道:你会打字吗?那条狗默默地走到打字机前,准确地打了一封信。经理问:你懂得怎样用计算机吗。 那条狗坐在一座终端机前面,编了个程序,运作准确。 我真的不能雇狗做这份工作,经理气急败坏地说。 就算会打字、懂计算机,但是我需要的雇员要能说两种语言。 那条狗抬头看着经理说:喵……”
12读小学的时候,觉得老师有两种: 一种是男的,一种是女的; 进了国中,发现老师还是有两种: 一种是会打人的,一种不会打人; 考上大学,发现老师也是有两种: 一种是有学问的,一种是没学问的; 自己当了老师之后,还是发现……老师有两种: 一种是有骨气的,一种是没有骨气的。
13 联考过后,在一次庆功宴上,两位研究所的名嘴对上了。 甲:放眼学术界,您堪称是冥师中的冥师! 乙:哪里,您才是亡牌中的亡牌! 甲:听说,您一向是因“财”施教啊! 乙:承让,您不也是“毁”人不倦吗!
14 爸爸:小明,过几天就要考试了。我先考考你,用"敬佩"造个句子吧! 小明:我不知道敬佩是什么意思。 爸爸:那么"遥远"呢? 小明:我不知道遥远是什么意思。 爸爸:那么“计较”呢? 小明:我不知道计较是什么意思。 爸爸:怎么搞的,每一个都不会! 小明:怎么不会?我不是每个都给你造出一个句子吗?
15 有一次上课时,老师突然看到一位学生右手上着石膏,绑着绷带, 于是,老师问:怎么才几天不见你,你的手是怎么啦? 生:断掉了。 师:啊!怎么会断掉? 生:因为我太懒了,所以就断掉了。 师:啥?太懒了手也会断掉啊? 生:没有啦!因为前几天我走在路上,走着走着有一棵小石头就跑到我的鞋子里,因为我懒得把鞋脱下来倒石头嘛,所以就右手扶着电线杆,左脚在半空中摇啊摇的,我想把石头摇下来,结果后面突然跑来一个人,用棍子把我的手打断了。 师:为什么? 生:唉……他以为我触电。
以上就是关于java的MD5withRSA算法可以看到解密的内容么全部的内容,包括:java的MD5withRSA算法可以看到解密的内容么、程序员节哪一天、你听过哪些学术性较强的笑话/段子等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)