熊猫儿 发表于 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

贴布局文件:


页: 28 29 30 31 32 33 34 35 36 37 [38] 39 40 41 42 43 44 45 46 47
查看完整版本: 【Android的一些重要知识6。。。。】