package com.devchina.scurity;
import java.security.SecureRandom;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
public class SecurityEnDe {
private static final String defalutSeed = "devchina";
private static final String algorithm = "AES";
private final static String HEX = "0123456789ABCDEF";
public static String encrypt(String cleartext) throws Exception {
return encrypt(defalutSeed, cleartext);
}
public static String encrypt(String seed, String cleartext)
throws Exception {
byte[] rawKey = getRawKey(seed.getBytes());
byte[] result = encrypt(rawKey, cleartext.getBytes());
return toHex(result);
}
public static String decrypt(String encrypted) throws Exception {
return decrypt(defalutSeed, encrypted);
}
public static String decrypt(String seed, String encrypted)
throws Exception {
byte[] rawKey = getRawKey(seed.getBytes());
byte[] enc = toByte(encrypted);
byte[] result = decrypt(rawKey, enc);
return new String(result);
}
private static byte[] getRawKey(byte[] seed) throws Exception {
KeyGenerator kgen = KeyGenerator.getInstance(algorithm);
SecureRandom sr = SecureRandom.getInstance("SHA1PRNG");
sr.setSeed(seed);
kgen.init(128, sr); // 192 and 256 bits may not be available
SecretKey skey = kgen.generateKey();
byte[] raw = skey.getEncoded();
return raw;
}
private static byte[] encrypt(byte[] raw, byte[] clear) throws Exception {
SecretKeySpec skeySpec = new SecretKeySpec(raw, algorithm);
Cipher cipher = Cipher.getInstance(algorithm);
cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
byte[] encrypted = cipher.doFinal(clear);
return encrypted;
}
private static byte[] decrypt(byte[] raw, byte[] encrypted)
throws Exception {
SecretKeySpec skeySpec = new SecretKeySpec(raw, algorithm);
Cipher cipher = Cipher.getInstance(algorithm);
cipher.init(Cipher.DECRYPT_MODE, skeySpec);
byte[] decrypted = cipher.doFinal(encrypted);
return decrypted;
}
public static String toHex(String txt) {
return toHex(txt.getBytes());
}
public static String fromHex(String hex) {
return new String(toByte(hex));
}
public static byte[] toByte(String hexString) {
int len = hexString.length() / 2;
byte[] result = new byte[len];
for (int i = 0; i < len; i++)
result[i] = Integer.valueOf(hexString.substring(2 * i, 2 * i + 2),
16).byteValue();
return result;
}
public static String toHex(byte[] buf) {
if (buf == null)
return "";
StringBuffer result = new StringBuffer(2 * buf.length);
for (int i = 0; i < buf.length; i++) {
appendHex(result, buf[i]);
}
return result.toString();
}
private static void appendHex(StringBuffer sb, byte b) {
sb.append(HEX.charAt((b >> 4) & 0x0f)).append(HEX.charAt(b & 0x0f));
}
}
分享到:
相关推荐
【WordPress Android客户端源代码解析】 WordPress作为全球最受欢迎的开源博客平台,其Android客户端的源代码对于开发者来说具有极高的学习价值。这份源代码不仅能够帮助我们深入理解Android应用的开发流程,还能让...
在Android客户端购物代码中,我们主要探讨的是如何利用Android平台开发一个功能完善的移动购物应用。这个项目对于初学者和有经验的开发者来说都是一个宝贵的资源,因为它涵盖了Android应用开发的关键技术,包括用户...
在Android客户端与服务器交互的过程中,通常涉及到网络编程和数据传输技术。这个压缩包中的"uploadTest"文件可能是实现客户端上传数据到服务器的一个示例。在这个过程中,客户端代码扮演着发送请求、封装数据以及...
在Android应用中,通常将公钥存储在客户端,用于加密数据;而私钥则保存在服务器端,用于解密数据,确保数据在传输过程中的安全性。 使用这个jar包,开发者可以方便地集成RSA加密到他们的Android应用中。以下是使用...
在本节"057集-Android客户端与服务端交互-服务端代码"的视频教程中,我们将深入探讨Android应用程序如何与服务端进行有效且安全的通信,这对于开发任何涉及网络功能的Android应用来说都是至关重要的。这个教程针对的...
本资源提供了Android客户端与服务器端进行登录验证的源代码,帮助开发者理解和实现这一关键功能。 首先,我们来看看客户端的部分。在Android客户端,通常会使用HTTP或HTTPS协议与服务器进行通信,这里用到了HTTP库...
在IT行业中,网络通信是构建分布式系统和移动应用的关键部分,尤其是当涉及到服务端与Android客户端的交互时。本主题主要关注的是如何通过代码实现两者之间的有效通信。下面将详细探讨这一领域的关键知识点。 首先...
本示例项目“android客户端与后台服务器交互demo”旨在演示如何在Android应用中与由Structs和Hibernate构建的后台服务器进行有效通信。以下是关于这个项目的一些关键知识点: 1. **Android客户端**:Android客户端...
本文将深入探讨如何使用XMPP(Extensible Messaging and Presence Protocol)协议来构建Android客户端与服务器之间的交互。XMPP是一种开放标准,主要用于即时消息传递和在线状态跟踪,它基于XML流,使得数据传输更为...
本教程将详细阐述Android客户端如何使用JSON进行数据交互,包括文件上传和文件浏览器功能的实现。 首先,我们需要理解JSON(JavaScript Object Notation)的基本结构。JSON是一种文本格式,易于人阅读和编写,同时...
2. **Android客户端实现**: - Android客户端通过使用HttpURLConnection或第三方库如OkHttp来发起HTTP请求。对于GET请求,可以在URL中添加查询参数;对于POST请求,需要设置请求方法为POST,并使用setDoOutput(true...
在Android客户端开发中,登录验证是至关重要的一个环节,它涉及到用户的身份确认、安全保护以及数据的准确性。本文将深入探讨Android客户端登录验证及其与后台交互的实现。 首先,我们来看"Android客户端登录验证...
【标题】"CSDN客户端 Android新闻客户端 完整代码" 涉及的知识点主要集中在Android应用开发领域,特别是构建一个功能完善的新闻阅读应用程序。这个项目可能包含了以下几个关键的技术和概念: 1. **Android SDK**:...
1. **HTTPS通信**:Android客户端应使用HTTPS协议与服务器进行通信,以确保数据在传输过程中被加密,防止中间人攻击。设置HTTPS通常涉及获取SSL证书并配置到服务器,以及在Android代码中使用TrustManager和...
综上所述,这个压缩包内容可能包括Android客户端的源代码,可能使用了特定的网络库进行JSON通信,有一个名为"McPro1AndroidClient"的可能就是客户端应用的源代码文件夹,还有可能的数据库配置或样例数据文件(如"mc_...
【Android QQ聊天工具客户端源代码】是一个用于学习和研究的项目,它揭示了Android平台上QQ客户端的实现细节,特别是如何利用Socket进行网络通信,包括TCP和UDP两种协议的应用。源代码分析将帮助开发者深入理解即时...
在这个“xmpp服务器和android客户端源码”项目中,我们涉及到了XMPP服务器的搭建与Android客户端应用的开发。接下来,我将详细讲解XMPP协议的核心概念、服务器端的实现以及Android客户端的集成。 1. **XMPP核心概念...
**Android客户端** Android客户端部分涉及以下几个关键知识点: 1. **Android SDK**:客户端应用的开发依赖于Android SDK,它提供了构建Android应用所需的各种工具和库。 2. **UI设计**:使用XML布局文件设计聊天...
这个"android客户端de登录注册源代码"提供了一个完整的解决方案,将Android客户端与PHP服务器进行交互,实现用户的身份验证和数据管理。这里我们将深入探讨相关知识点。 1. **Android客户端开发**: - **Activity*...
本项目涉及的核心知识点是构建一个完整的登录系统,包括Android客户端、Web服务器以及MySQL数据库。以下将详细阐述每个环节的关键技术和步骤。 首先,**Android客户端**是用户与应用程序交互的界面。在这里,我们...