熊猫儿
发表于 2016-9-27 14:28
本帖最后由 熊猫儿 于 2016-9-28 14:46 编辑
MD5,MD2,SHA加密的实现方式
标签: md5加密
http://static.blog.csdn.net/images/category_icon.jpg 分类:
数据加解密(5) http://static.blog.csdn.net/images/arrow_triangle%20_down.jpg
版权声明:本文为博主原创文章,未经博主允许不得转载。
view plain copy
[*]import java.security.MessageDigest;
[*]
[*]import javax.xml.bind.annotation.adapters.HexBinaryAdapter;
[*]
[*]public class Main {
[*]
[*] static String src = "Hello,sahadev!";
[*]
[*] public static void main(String[] args) {
[*] MD5();
[*] MD2();
[*] SHA();
[*] }
[*]
[*] /**
[*] * MD5加密
[*] */
[*] public static void MD5() {
[*] try {
[*] // 获取MD5加密工具
[*] MessageDigest md = MessageDigest.getInstance("MD5");
[*] // 加密
[*] byte[] digest = md.digest(src.getBytes());
[*] // 获取二进制十六进制互转工具
[*] HexBinaryAdapter hexBinaryAdapter = new HexBinaryAdapter();
[*] // 将二进制数组转换为十六进制字符串
[*] String marshal = hexBinaryAdapter.marshal(digest);
[*] // 输出结果
[*] System.out.println(marshal);
[*] } catch (Exception e) {
[*] e.printStackTrace();
[*] }
[*] }
[*]
[*] /**
[*] * MD2加密
[*] */
[*] public static void MD2() {
[*] try {
[*] // 获取MD2加密工具
[*] MessageDigest md = MessageDigest.getInstance("MD2");
[*] // 加密
[*] byte[] digest = md.digest(src.getBytes());
[*] // 获取二进制十六进制互转工具
[*] HexBinaryAdapter hexBinaryAdapter = new HexBinaryAdapter();
[*] // 将二进制数组转换为十六进制字符串
[*] String marshal = hexBinaryAdapter.marshal(digest);
[*] // 输出结果
[*] System.out.println(marshal);
[*] } catch (Exception e) {
[*] e.printStackTrace();
[*] }
[*] }
熊猫儿
发表于 2016-9-28 14:45
本帖最后由 熊猫儿 于 2016-9-28 14:46 编辑
view plain copy
[*]输出结果:
view plain copy
[*]MD5 : 8FC69C57ACC2258C7B4A9D39DC4C940B
[*]MD2 : 9EAF08289903A29C3C58D2AAA25BD83D
[*]SHA : 1B1330BFC6257FC9F4B4ED5CB605FA4109608CCA
消息摘要算法HmacMD5的实现
http://static.blog.csdn.net/images/category_icon.jpg 分类:
数据加解密(5) http://static.blog.csdn.net/images/arrow_triangle%20_down.jpg
版权声明:本文为博主原创文章,未经博主允许不得转载。
MAC算法主要用于消息验证
以下为算法实现:
view plain copy
[*]import javax.crypto.KeyGenerator;
[*]import javax.crypto.Mac;
[*]import javax.crypto.SecretKey;
[*]import javax.xml.bind.annotation.adapters.HexBinaryAdapter;
[*]
[*]public class Main {
[*]
[*] static String src = "Hello,sahadev!";
[*]
[*] public static void main(String[] args) {
[*] HmacMD5();
[*] }
[*]
[*] public static void HmacMD5() {
[*] try {
[*] // 获取密钥生成器
[*] KeyGenerator keyGenerator = KeyGenerator.getInstance("HmacMD5");
[*] // 生成密钥
[*] SecretKey generateKey = keyGenerator.generateKey();
[*]
[*] // 获取"Message Authentication Code" (MAC) algorithm实例
[*] Mac instance = Mac.getInstance(generateKey.getAlgorithm());
[*] // 根据生产的密钥初始化该实例
[*] instance.init(generateKey);
[*]
[*] // 加密消息
[*] byte[] doFinal = instance.doFinal(src.getBytes());
[*] // 输出加密后的消息
[*] System.out.println("HmacMD5 : "
[*] + new HexBinaryAdapter().marshal(doFinal));
[*]
[*] } catch (Exception e) {
[*] e.printStackTrace();
[*] }
[*] }
[*]
[*]}
[*]
熊猫儿
发表于 2016-9-28 14:45
以DES的方式实现对称加密,并提供密钥
标签: 加密DES解密对称加密
http://static.blog.csdn.net/images/category_icon.jpg 分类:
数据加解密(5) http://static.blog.csdn.net/images/arrow_triangle%20_down.jpg
版权声明:本文为博主原创文章,未经博主允许不得转载。
注释都在代码里了,干了:
view plain copy
[*]import javax.crypto.Cipher;
[*]import javax.crypto.KeyGenerator;
[*]import javax.crypto.SecretKey;
[*]import javax.crypto.spec.SecretKeySpec;
[*]import javax.xml.bind.annotation.adapters.HexBinaryAdapter;
[*]
[*]import org.apache.commons.codec.binary.Hex;
[*]
[*]public class Main {
[*]
[*] static String src = "Hello,sahadev!";
[*]
[*] public static void main(String[] args) {
[*] DES();
[*] }
[*]
[*] public static void DES() {
[*]
[*] try {
[*] // 以DES的方式初始化Key生成器
[*] KeyGenerator keyGenerator = KeyGenerator.getInstance("DES");
[*] keyGenerator.init(56);// 设置密钥的长度为56位
[*] // 生成一个Key
[*] SecretKey generateKey = keyGenerator.generateKey();
[*] // 转变为字节数组
[*] byte[] encoded = generateKey.getEncoded();
[*] // 生成密钥字符串
[*] String encodeHexString = Hex.encodeHexString(encoded);
[*] System.out.println("Key : " + encodeHexString);
[*] // 再把我们的字符串转变为字节数组,可以用于另一方使用,验证
[*] byte[] decodeHex = Hex.decodeHex(encodeHexString.toCharArray());
[*] // 生成密钥对象
[*] SecretKeySpec secretKeySpec = new SecretKeySpec(decodeHex, "DES");
[*]
[*] // 获取加解密实例
[*] Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
[*] // 初始化加密模式
[*] cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);
[*] // 加密
[*] byte[] doFinal = cipher.doFinal(src.getBytes());
[*] System.out.println("加密结果 : " + new HexBinaryAdapter().marshal(doFinal));
[*]
[*] // 初始化解密模式
[*] cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);
[*] // 解密
[*] byte[] doFinal2 = cipher.doFinal(doFinal);
[*] // 输出解密结果
[*] System.out.println("解密结果 : " + new String(doFinal2));
[*] } catch (Exception e) {
[*] e.printStackTrace();
[*] }
[*]
[*] }
[*]
[*]}
http://static.blog.csdn.net/images/save_snippets.png
附上输出结果:
view plain copy
[*]Key : 619b862f5e2aad40
[*]加密结果 : D98FA80E83593710C0686370665C2FEC
[*]解密结果 : Hello,sahadev!
熊猫儿
发表于 2016-9-28 14:47
以DH的方式实现非对称加密
2015-09-28 01:16 258人阅读 评论(0) 收藏 举报
http://static.blog.csdn.net/images/category_icon.jpg 分类:
数据加解密(5) http://static.blog.csdn.net/images/arrow_triangle%20_down.jpg
版权声明:本文为博主原创文章,未经博主允许不得转载。
view plain copy
[*]package com.sahadev;
[*]
[*]import java.security.KeyFactory;
[*]import java.security.KeyPair;
[*]import java.security.KeyPairGenerator;
[*]import java.security.PrivateKey;
[*]import java.security.PublicKey;
[*]import java.security.spec.X509EncodedKeySpec;
[*]import java.util.Objects;
[*]
[*]import javax.crypto.Cipher;
[*]import javax.crypto.KeyAgreement;
[*]import javax.crypto.SecretKey;
[*]import javax.crypto.interfaces.DHPublicKey;
[*]import javax.crypto.spec.DHParameterSpec;
[*]
[*]import org.apache.commons.codec.binary.Hex;
[*]
[*]public class DH {
[*]
[*] public static String src = "Hello,sahadev!";
[*]
[*] public static void main(String[] args) {
[*] JDKDH();
[*] }
[*]
[*] public static void JDKDH() {
[*] try {
[*] // 初始化发送方密钥
[*] KeyPairGenerator senderKeyPairGenerator = KeyPairGenerator.getInstance("DH");
[*] senderKeyPairGenerator.initialize(512);
[*] KeyPair senderKeyPair = senderKeyPairGenerator.generateKeyPair();
[*] byte[] senderPublicKey = senderKeyPair.getPublic().getEncoded();
[*]
[*] // 初始化接收方的密钥
[*] KeyFactory instance = KeyFactory.getInstance("DH");
[*] X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(senderPublicKey);
[*] PublicKey sendPublicKeyTemp = instance.generatePublic(x509EncodedKeySpec);
[*] DHParameterSpec dhParameterSpec = ((DHPublicKey) sendPublicKeyTemp).getParams();
[*] KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("DH");
[*] keyPairGenerator.initialize(dhParameterSpec);
[*] // 接收方生成密钥
[*] KeyPair generateKeyPair = keyPairGenerator.generateKeyPair();
[*] byte[] receiverPublicKey = generateKeyPair.getPublic().getEncoded();
[*] PrivateKey receiverPrivateKey = generateKeyPair.getPrivate();
[*]
[*] // 接收方密钥构建
[*] KeyAgreement receiverKeyAgreement = KeyAgreement.getInstance("DH");
[*] receiverKeyAgreement.init(receiverPrivateKey);
[*] receiverKeyAgreement.doPhase(senderKeyPair.getPublic(), true);
[*] // 使用我的密钥和你的公钥生成密钥
[*] SecretKey receiverDesKey = receiverKeyAgreement.generateSecret("DES");
[*]
[*] // 发送方密钥构建
[*] KeyFactory keyFactory = KeyFactory.getInstance("DH");
[*] X509EncodedKeySpec x509EncodedKeySpec2 = new X509EncodedKeySpec(receiverPublicKey);
[*] PublicKey receiverPublicKeyTemp = keyFactory.generatePublic(x509EncodedKeySpec2);
[*]
[*] // 发送方拿到接收方返回的公钥做本地密钥
[*] KeyAgreement senderKeyAgreement = KeyAgreement.getInstance("DH");
[*] senderKeyAgreement.init(senderKeyPair.getPrivate());
[*] senderKeyAgreement.doPhase(receiverPublicKeyTemp, true);
[*] // 使用你的密钥我的公钥进行构建
[*] SecretKey senderDesKey = senderKeyAgreement.generateSecret("DES");
[*]
[*] // 判断双方的本地密钥是否相同
[*] if (Objects.equals(receiverDesKey, senderDesKey)) {
[*] System.out.println("双方密钥相同");
[*] }
[*]
熊猫儿
发表于 2016-9-28 14:48
[*]// 加密
[*] Cipher cipher = Cipher.getInstance("DES");
[*] cipher.init(Cipher.ENCRYPT_MODE, senderDesKey);
[*] byte[] result = cipher.doFinal(src.getBytes());
[*] System.out.println("加密结果为 : " + Hex.encodeHexString(result));
[*]
[*] // 解密
[*] cipher.init(Cipher.DECRYPT_MODE, senderDesKey);
[*] result = cipher.doFinal(result);
[*] System.out.println("解密结果为 : " + new String(result));
[*] } catch (Exception e) {
[*] e.printStackTrace();
[*] }
[*]
[*] }
[*]
[*]}
view plain copy
[*]
view plain copy
[*]附上结果:
http://static.blog.csdn.net/images/save_snippets_01.png
view plain copy
[*]双方密钥相同
[*]DES : da1cc13d388423e82a110539414b1ec0
[*]解密结果为 : Hello,sahadev!
[*]
熊猫儿
发表于 2016-9-28 14:48
以RSA的方式实现非对称加密
标签: rsa解密加密非对称加密
http://static.blog.csdn.net/images/category_icon.jpg 分类:
数据加解密(5) http://static.blog.csdn.net/images/arrow_triangle%20_down.jpg
版权声明:本文为博主原创文章,未经博主允许不得转载。
view plain copy
[*]package com.sahadev;
[*]
[*]import java.security.KeyFactory;
[*]import java.security.KeyPair;
[*]import java.security.KeyPairGenerator;
[*]import java.security.PrivateKey;
[*]import java.security.PublicKey;
[*]import java.security.interfaces.RSAPrivateKey;
[*]import java.security.interfaces.RSAPublicKey;
[*]import java.security.spec.PKCS8EncodedKeySpec;
[*]import java.security.spec.X509EncodedKeySpec;
[*]
[*]import javax.crypto.Cipher;
[*]
[*]import org.apache.commons.codec.binary.Base64;
[*]
[*]public class RSA {
[*]
[*] public static void main(String[] args) {
[*] JDKRSA();
[*] }
[*]
[*] public static void JDKRSA() {
[*] try {
[*] // 构建密钥对儿
[*] KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
[*] keyPairGenerator.initialize(512);
[*] KeyPair keyPair = keyPairGenerator.generateKeyPair();
[*] RSAPublicKey rsaPublicKey = (RSAPublicKey) keyPair.getPublic();
[*] RSAPrivateKey rsaPrivateKey = (RSAPrivateKey) keyPair.getPrivate();
[*] System.out.println("Public Key : " + org.apache.commons.codec.binary.Base64.encodeBase64String(rsaPublicKey.getEncoded()));
[*] System.out.println("Private Key : " + org.apache.commons.codec.binary.Base64.encodeBase64String(rsaPrivateKey.getEncoded()));
[*]
[*] // 2.私钥加密,公钥解密---加密
[*] PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(rsaPrivateKey.getEncoded());
[*] KeyFactory keyFactory = KeyFactory.getInstance("RSA");
[*] PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec);
[*] Cipher cipher = Cipher.getInstance("RSA");
[*] cipher.init(Cipher.ENCRYPT_MODE, privateKey);
[*] byte[] result = cipher.doFinal(DH.src.getBytes());
[*] System.out.println("私钥加密,公钥解密------加密 : " + Base64.encodeBase64String(result));
[*]
[*] // 3.私钥加密,公钥解密---解密
[*] X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(rsaPublicKey.getEncoded());
[*] keyFactory = KeyFactory.getInstance("RSA");
[*] PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec);
[*] cipher = Cipher.getInstance("RSA");
[*] cipher.init(Cipher.DECRYPT_MODE, publicKey);
[*] result = cipher.doFinal(result);
[*] System.out.println("私钥加密,公钥解密------解密 : " + new String(result));
[*]
[*] // 4.公钥加密,私钥解密---加密
[*] x509EncodedKeySpec = new X509EncodedKeySpec(rsaPublicKey.getEncoded());
[*] keyFactory = KeyFactory.getInstance("RSA");
[*] publicKey = keyFactory.generatePublic(x509EncodedKeySpec);
[*] cipher = Cipher.getInstance("RSA");
[*] cipher.init(Cipher.ENCRYPT_MODE, publicKey);
熊猫儿
发表于 2016-9-29 15:55
[*]result = cipher.doFinal(DH.src.getBytes());
[*]
[*] System.out.println("公钥加密,私钥解密------加密 : " + Base64.encodeBase64String(result));
[*]
[*] // 5.公钥加密,私钥解密---解密
[*] pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(rsaPrivateKey.getEncoded());
[*] keyFactory = KeyFactory.getInstance("RSA");
[*] privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec);
[*] cipher = Cipher.getInstance("RSA");
[*] cipher.init(Cipher.DECRYPT_MODE, privateKey);
[*] result = cipher.doFinal(result);
[*] System.out.println("公钥加密,私钥解密------解密 : " + new String(result));
[*] } catch (Exception e) {
[*] e.printStackTrace();
[*] }
[*] }
[*]}
http://static.blog.csdn.net/images/save_snippets.png
view plain copy
[*]附上输出结果:
view plain copy
[*]Public Key : MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJcFshoP5xm94r2aTbe++aMZMzJtXHxDpqmMQ9aL1cEthr2Xtac+Eckv32Kzb4R8C/6vObNBfd8sWx9FU5N2y6cCAwEAAQ==
[*]Private Key : MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAlwWyGg/nGb3ivZpNt775oxkzMm1cfEOmqYxD1ovVwS2GvZe1pz4RyS/fYrNvhHwL/q85s0F93yxbH0VTk3bLpwIDAQABAkBdAA7rabug6IRGykztyFcmjxAuD5aSl358jnoAFuCtMo4skfxh1vR4ENFUE0Lt0zJ3CKVH0o9UQDNG0r4jeOGRAiEA3KuXps9OG0AXuxLggg0e7B1Os5C3gNrH2fMqAPjtpY0CIQCvM4EPfdrjjNQiM0ATVBT5jZnw3PRu33pdyISWuoMHAwIgDOLMSUZjxj2Y5Si2CYIgoyMW/G9f99tOvlBvzHy8y+UCIF94MVu/uQdGNlJsmv3tU4CpKLmXrZq9LHDuU1HPUJcBAiEAy/0OS2Q9EBfmPwhsGXF4WMxj4wG0xzNFWxSeZB0qxzk=
[*]私钥加密,公钥解密------加密 : NXF87irBEmK3x/fW7IWY4GuA8AP4Rvj4DJSp2Cjjsoo5X/ScHHKdvYtlM+9TOUAvMeuKWk5WH70g53q7+E73zg==
[*]私钥加密,公钥解密------解密 : Hello,sahadev!
[*]公钥加密,私钥解密------加密 : hjL8928jCbNtVCRhKaYAxQNJmiIAktBskhff2I01pbaHtfGH6GJTcP1i345/3I9OzwoVFxvi/oXgVJsIsg7MOQ==
[*]公钥加密,私钥解密------解密 : Hello,sahadev!
[*]
熊猫儿
发表于 2016-9-29 15:55
HTTPS请求实现框架
标签: HTTPS
2015-09-29 11:21 215人阅读 评论(0) 收藏 举报
http://static.blog.csdn.net/images/category_icon.jpg 分类:
其它(13) http://static.blog.csdn.net/images/arrow_triangle%20_down.jpg
HTTPS主要用于安全传输数据,从代码的角度来看,HTTPS主要使用了X509的方式进行了加密,至于密钥(证书)在什么地方,可能在购买HTTPS服务的时候被统一放置在DNS服务器之类的地方了吧(纯推测):
view plain copy
[*]package com.sahadev;
[*]
[*]import java.io.BufferedReader;
[*]import java.io.DataOutputStream;
[*]import java.io.InputStreamReader;
[*]import java.io.OutputStream;
[*]import java.net.URL;
[*]import java.security.SecureRandom;
[*]import java.security.cert.X509Certificate;
[*]
[*]import javax.net.ssl.HttpsURLConnection;
[*]import javax.net.ssl.KeyManager;
[*]import javax.net.ssl.SSLContext;
[*]import javax.net.ssl.SSLSocketFactory;
[*]import javax.net.ssl.X509TrustManager;
[*]
[*]import org.apache.http.conn.ssl.AllowAllHostnameVerifier;
[*]
[*]
[*]public class HttpClient {
[*] private static final AllowAllHostnameVerifier HOSTNAME_VERIFIER = new AllowAllHostnameVerifier();
[*] private static X509TrustManager xtm = new X509TrustManager() {
[*] public void checkClientTrusted(X509Certificate[] chain, String authType) {
[*] }
[*]
[*] public void checkServerTrusted(X509Certificate[] chain, String authType) {
[*] }
[*]
[*] public X509Certificate[] getAcceptedIssuers() {
[*] return null;
[*] }
[*] };
[*] private static X509TrustManager[] xtmArray = new X509TrustManager[] { xtm };
[*] private static HttpsURLConnection conn = null;
[*]
[*]
[*] public static String sendHttpsPost(String path, String params) throws Exception {
[*] // 组拼实体数据
[*] byte[] entity = params.getBytes("UTF-8");
[*] URL url = new URL(path);
[*] conn = (HttpsURLConnection) url.openConnection();
[*] if (conn instanceof HttpsURLConnection) {
[*] // Trust all certificates
[*] SSLContext context = SSLContext.getInstance("TLS");
[*] context.init(new KeyManager, xtmArray, new SecureRandom());
[*] SSLSocketFactory socketFactory = context.getSocketFactory();
[*] ((HttpsURLConnection) conn).setSSLSocketFactory(socketFactory);
[*] ((HttpsURLConnection) conn).setHostnameVerifier(HOSTNAME_VERIFIER);
[*] }
[*] conn.setConnectTimeout(5 * 1000);
[*] conn.setReadTimeout(30000);
[*] conn.setDoInput(true);
[*] conn.setDoOutput(true);// 允许输出数据
[*] conn.setUseCaches(false);
[*] conn.setRequestMethod("POST");
[*] conn.setRequestProperty("Content-Type", "application/json");
熊猫儿
发表于 2016-9-29 15:56
[*] conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.2.6)");
[*]
[*] OutputStream outStream = new DataOutputStream(conn.getOutputStream());
[*] outStream.write(entity);
[*]
[*] outStream.flush();
[*] outStream.close();
[*]
[*] BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
[*] StringBuffer sb = new StringBuffer();
[*] String line;
[*] while ((line = br.readLine()) != null) {
[*] sb.append(line);
[*] }
[*]
[*] return sb.toString();
[*] }
[*]
[*] public static void closeConnection() {
[*] if (conn != null)
[*] conn.disconnect();
[*] }
[*]}
http://static.blog.csdn.net/images/save_snippets.png
熊猫儿
发表于 2016-9-29 15:57
Android实现炫酷的星空变幻效果
二话不说,先上效果图:
http://img.blog.csdn.net/20150929233250175?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast
这个图是什么意思呢,有没有看到一直在变颜色啊,有没有很像星云变幻呢,有没有很炫,快来看看怎么实现的吧!
这是我们要被处理的原图,实现方式就是通过不断的改变这张图的色相从而达到效果:
http://img.blog.csdn.net/20150929230627160?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast
贴布局文件: