- 浏览: 185393 次
- 性别:
- 来自: 浙江
文章分类
最新评论
代码参考:http://www.apkbus.com/forum.php?mod=viewthread&tid=52121&ordertype=1
核心代码如下:
public class SymEncrypt {
/**
* 获得key
* @param arrBTmp 秘钥字节
* @param alg 加密方式名称
* @return
*/
public static Key getKey(byte[] arrBTmp, String alg){
if(!(alg.equals("DES")||alg.equals("DESede")||alg.equals("AES"))){
System.out.println("alg type not find: "+alg);
return null;
}
byte[] arrB;
if(alg.equals("DES")){
arrB = new byte[8];
}
else if(alg.equals("DESede")){
arrB = new byte[24];
}
else{
arrB = new byte[16];
}
int i=0;
int j=0;
while(i < arrB.length){
if(j>arrBTmp.length-1){
j=0;
}
arrB[i] = arrBTmp[j];
i++;
j++;
}
Key key = new javax.crypto.spec.SecretKeySpec(arrB, alg);
return key;
}
/**
* 加密
* @param s 文件字符串
* @param strKey 密钥字符串
* @param alg 加密方式
* @return
*/
public static byte[] encrypt(String s,String strKey,String alg){
if(!(alg.equals("DES")||alg.equals("DESede")||alg.equals("AES"))){
System.out.println("alg type not find: "+alg);
return null;
}
byte[] r=null;
try {
Key key = getKey(strKey.getBytes(),alg);
Cipher c;
c = Cipher.getInstance(alg);
c.init(Cipher.ENCRYPT_MODE, key);
r = c.doFinal(s.getBytes());
//System.out.println("加密后的二进串:" + FileDigest.byte2Str(r));
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchPaddingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvalidKeyException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (BadPaddingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return r;
}
/**
* 解密
* @param code 文件字节
* @param strKey 密钥
* @param alg 加密方式
* @return
*/
public static String decrypt(byte[] code,String strKey,String alg){
if(!(alg.equals("DES")||alg.equals("DESede")||alg.equals("AES"))){
System.out.println("alg type not find: "+alg);
return null;
}
String r=null;
try {
Key key = getKey(strKey.getBytes(),alg);
Cipher c;
c = Cipher.getInstance(alg);
c.init(Cipher.DECRYPT_MODE,key);
byte[] clearByte=c.doFinal(code);
r=new String(clearByte);
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchPaddingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvalidKeyException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (BadPaddingException e) {
// TODO Auto-generated catch block
System.out.println("not padding");
r=null;
}
//System.out.println("解密后的信息:"+r);
return r;
}
}
文件签名如下:
public class RsaVerify {
/**
* 生成密钥
* @param size 长度
* @param prifile 私钥
* @param pubfile 公钥
* @return
*/
public static boolean creatKey(int size, String prifile, String pubfile) {
if ((new java.io.File(prifile)).exists() == false && (new java.io.File(pubfile)).exists() == false) {
if (generatekey(size, prifile, pubfile) == false) {
return false;
} else
return true;
} else
return false;
}
/**
*
* @param s
* 源文件
* @param prifile
* 秘钥文件
* @param sign
* 目标文件
* @return
*/
public static boolean sign(String s, String prifile, String sign) {
boolean r = false;
try {
java.io.ObjectInputStream in = new java.io.ObjectInputStream(new java.io.FileInputStream(
prifile));
PrivateKey myprikey = (PrivateKey) in.readObject();
in.close();
Signature signet = Signature.getInstance("SHA1WithRSA");
signet.initSign(myprikey);
signet.update(s.getBytes());
byte[] signed = signet.sign();
// System.out.println("signed(签名内容)="+FileDigest.byte2Str(signed));
java.io.ObjectOutputStream out = new java.io.ObjectOutputStream(new java.io.FileOutputStream(
sign));
out.writeObject(signed);
out.close();
r = true;
// System.out.println("签名并生成文件成功");
} catch (java.lang.Exception e) {
e.printStackTrace();
// System.out.println("签名并生成文件失败");
r = false;
}
return r;
}
/**
* 签名验证
* @param s 源文件
* @param pubfile 公钥文件
* @param sign 签名文件
* @return
*/
public static boolean checkSign(String s, String pubfile, String sign) {
boolean r = false;
try {
java.io.ObjectInputStream in = new java.io.ObjectInputStream(new java.io.FileInputStream(
pubfile));
PublicKey pubkey = (PublicKey) in.readObject();
in.close();
// System.out.println(pubkey.getFormat());
in = new java.io.ObjectInputStream(new java.io.FileInputStream(sign));
byte[] signed = (byte[]) in.readObject();
in.close();
Signature signetcheck = Signature.getInstance("SHA1WithRSA");
signetcheck.initVerify(pubkey);
signetcheck.update(s.getBytes());
if (signetcheck.verify(signed)) {
// System.out.println("info=" + s);
// System.out.println("签名正常");
r = true;
} else {
// System.out.println("非签名正常");
r = false;
}
} catch (java.lang.Exception e) {
e.printStackTrace();
System.out.println("Error: checkSign failed");
}
return r;
}
/**
* 生成密钥
* @param size 长度
* @param prifile 私钥
* @param pubfile 公钥
* @return
*/
public static boolean generatekey(int size, String prifile, String pubfile) {
try {
KeyPairGenerator keygen = KeyPairGenerator.getInstance("RSA");
keygen.initialize(size);
KeyPair keys = keygen.generateKeyPair();
PublicKey pubkey = keys.getPublic();
PrivateKey prikey = keys.getPrivate();
java.io.ObjectOutputStream out = new java.io.ObjectOutputStream(new java.io.FileOutputStream(
prifile));
out.writeObject((Object) prikey);
out.close();
// System.out.println("写入对象 prikeys ok");
out = new java.io.ObjectOutputStream(new java.io.FileOutputStream(pubfile));
out.writeObject((Object) pubkey);
out.close();
// System.out.println("写入对象 pubkeys ok");
return true;
} catch (java.lang.Exception e) {
e.printStackTrace();
// System.out.println("生成密钥对失败");
return false;
}
}
}
报文鉴别如下:
public class FileDigest {
/**
* SHA1报文鉴别
* @param s 资源文件
* @return 鉴别码文件
*/
public static byte[] digestSHA1(String s) {
byte[] digesta=null;
try {
MessageDigest alg = MessageDigest.getInstance("SHA-1");
alg.update(s.getBytes());
digesta = alg.digest();
}catch (NoSuchAlgorithmException e) {
System.out.println("Error: digestSHA1 failed");
}
return digesta;
}
/**
* MD5报文鉴别
* @param s 资源文件
* @return 鉴别码文件
*/
public static byte[] digestMD5(String s) {
byte[] digesta=null;
MessageDigest alg;
try {
alg = MessageDigest.getInstance("MD5");
alg.update(s.getBytes());
digesta = alg.digest();
} catch (NoSuchAlgorithmException e) {
System.out.println("Error: digestMD5 failed");
}
return digesta;
}
/**
*
* @param b 鉴别码文件
* @param s 资源文件
* @param algo
* @return
*/
public static boolean isEqual(byte[] b,String s,int algo){
MessageDigest alg;
boolean r=false;
try{
if(algo==0){
alg = MessageDigest.getInstance("MD5");
}
else{
alg = MessageDigest.getInstance("SHA-1");
}
alg.update(s.getBytes());
if (MessageDigest.isEqual(b, alg.digest())) {
r=true;
} else {
r=false;
}
}catch (NoSuchAlgorithmException e) {
System.out.println("Error: isEqual failed");
}
return r;
}
/**
* 字节到字符串
* @param b
* @return
*/
public static String byte2Str(byte[] b)
{
String str = "";
String stmp = "";
for (int n = 0; n < b.length; n++) {
stmp = (Integer.toHexString(b[n] & 0XFF));
if (stmp.length() == 1)
str = str + "0" + stmp;
else
str = str + stmp;
}
return str;
}
}
核心代码如下:
public class SymEncrypt {
/**
* 获得key
* @param arrBTmp 秘钥字节
* @param alg 加密方式名称
* @return
*/
public static Key getKey(byte[] arrBTmp, String alg){
if(!(alg.equals("DES")||alg.equals("DESede")||alg.equals("AES"))){
System.out.println("alg type not find: "+alg);
return null;
}
byte[] arrB;
if(alg.equals("DES")){
arrB = new byte[8];
}
else if(alg.equals("DESede")){
arrB = new byte[24];
}
else{
arrB = new byte[16];
}
int i=0;
int j=0;
while(i < arrB.length){
if(j>arrBTmp.length-1){
j=0;
}
arrB[i] = arrBTmp[j];
i++;
j++;
}
Key key = new javax.crypto.spec.SecretKeySpec(arrB, alg);
return key;
}
/**
* 加密
* @param s 文件字符串
* @param strKey 密钥字符串
* @param alg 加密方式
* @return
*/
public static byte[] encrypt(String s,String strKey,String alg){
if(!(alg.equals("DES")||alg.equals("DESede")||alg.equals("AES"))){
System.out.println("alg type not find: "+alg);
return null;
}
byte[] r=null;
try {
Key key = getKey(strKey.getBytes(),alg);
Cipher c;
c = Cipher.getInstance(alg);
c.init(Cipher.ENCRYPT_MODE, key);
r = c.doFinal(s.getBytes());
//System.out.println("加密后的二进串:" + FileDigest.byte2Str(r));
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchPaddingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvalidKeyException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (BadPaddingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return r;
}
/**
* 解密
* @param code 文件字节
* @param strKey 密钥
* @param alg 加密方式
* @return
*/
public static String decrypt(byte[] code,String strKey,String alg){
if(!(alg.equals("DES")||alg.equals("DESede")||alg.equals("AES"))){
System.out.println("alg type not find: "+alg);
return null;
}
String r=null;
try {
Key key = getKey(strKey.getBytes(),alg);
Cipher c;
c = Cipher.getInstance(alg);
c.init(Cipher.DECRYPT_MODE,key);
byte[] clearByte=c.doFinal(code);
r=new String(clearByte);
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchPaddingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvalidKeyException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (BadPaddingException e) {
// TODO Auto-generated catch block
System.out.println("not padding");
r=null;
}
//System.out.println("解密后的信息:"+r);
return r;
}
}
文件签名如下:
public class RsaVerify {
/**
* 生成密钥
* @param size 长度
* @param prifile 私钥
* @param pubfile 公钥
* @return
*/
public static boolean creatKey(int size, String prifile, String pubfile) {
if ((new java.io.File(prifile)).exists() == false && (new java.io.File(pubfile)).exists() == false) {
if (generatekey(size, prifile, pubfile) == false) {
return false;
} else
return true;
} else
return false;
}
/**
*
* @param s
* 源文件
* @param prifile
* 秘钥文件
* @param sign
* 目标文件
* @return
*/
public static boolean sign(String s, String prifile, String sign) {
boolean r = false;
try {
java.io.ObjectInputStream in = new java.io.ObjectInputStream(new java.io.FileInputStream(
prifile));
PrivateKey myprikey = (PrivateKey) in.readObject();
in.close();
Signature signet = Signature.getInstance("SHA1WithRSA");
signet.initSign(myprikey);
signet.update(s.getBytes());
byte[] signed = signet.sign();
// System.out.println("signed(签名内容)="+FileDigest.byte2Str(signed));
java.io.ObjectOutputStream out = new java.io.ObjectOutputStream(new java.io.FileOutputStream(
sign));
out.writeObject(signed);
out.close();
r = true;
// System.out.println("签名并生成文件成功");
} catch (java.lang.Exception e) {
e.printStackTrace();
// System.out.println("签名并生成文件失败");
r = false;
}
return r;
}
/**
* 签名验证
* @param s 源文件
* @param pubfile 公钥文件
* @param sign 签名文件
* @return
*/
public static boolean checkSign(String s, String pubfile, String sign) {
boolean r = false;
try {
java.io.ObjectInputStream in = new java.io.ObjectInputStream(new java.io.FileInputStream(
pubfile));
PublicKey pubkey = (PublicKey) in.readObject();
in.close();
// System.out.println(pubkey.getFormat());
in = new java.io.ObjectInputStream(new java.io.FileInputStream(sign));
byte[] signed = (byte[]) in.readObject();
in.close();
Signature signetcheck = Signature.getInstance("SHA1WithRSA");
signetcheck.initVerify(pubkey);
signetcheck.update(s.getBytes());
if (signetcheck.verify(signed)) {
// System.out.println("info=" + s);
// System.out.println("签名正常");
r = true;
} else {
// System.out.println("非签名正常");
r = false;
}
} catch (java.lang.Exception e) {
e.printStackTrace();
System.out.println("Error: checkSign failed");
}
return r;
}
/**
* 生成密钥
* @param size 长度
* @param prifile 私钥
* @param pubfile 公钥
* @return
*/
public static boolean generatekey(int size, String prifile, String pubfile) {
try {
KeyPairGenerator keygen = KeyPairGenerator.getInstance("RSA");
keygen.initialize(size);
KeyPair keys = keygen.generateKeyPair();
PublicKey pubkey = keys.getPublic();
PrivateKey prikey = keys.getPrivate();
java.io.ObjectOutputStream out = new java.io.ObjectOutputStream(new java.io.FileOutputStream(
prifile));
out.writeObject((Object) prikey);
out.close();
// System.out.println("写入对象 prikeys ok");
out = new java.io.ObjectOutputStream(new java.io.FileOutputStream(pubfile));
out.writeObject((Object) pubkey);
out.close();
// System.out.println("写入对象 pubkeys ok");
return true;
} catch (java.lang.Exception e) {
e.printStackTrace();
// System.out.println("生成密钥对失败");
return false;
}
}
}
报文鉴别如下:
public class FileDigest {
/**
* SHA1报文鉴别
* @param s 资源文件
* @return 鉴别码文件
*/
public static byte[] digestSHA1(String s) {
byte[] digesta=null;
try {
MessageDigest alg = MessageDigest.getInstance("SHA-1");
alg.update(s.getBytes());
digesta = alg.digest();
}catch (NoSuchAlgorithmException e) {
System.out.println("Error: digestSHA1 failed");
}
return digesta;
}
/**
* MD5报文鉴别
* @param s 资源文件
* @return 鉴别码文件
*/
public static byte[] digestMD5(String s) {
byte[] digesta=null;
MessageDigest alg;
try {
alg = MessageDigest.getInstance("MD5");
alg.update(s.getBytes());
digesta = alg.digest();
} catch (NoSuchAlgorithmException e) {
System.out.println("Error: digestMD5 failed");
}
return digesta;
}
/**
*
* @param b 鉴别码文件
* @param s 资源文件
* @param algo
* @return
*/
public static boolean isEqual(byte[] b,String s,int algo){
MessageDigest alg;
boolean r=false;
try{
if(algo==0){
alg = MessageDigest.getInstance("MD5");
}
else{
alg = MessageDigest.getInstance("SHA-1");
}
alg.update(s.getBytes());
if (MessageDigest.isEqual(b, alg.digest())) {
r=true;
} else {
r=false;
}
}catch (NoSuchAlgorithmException e) {
System.out.println("Error: isEqual failed");
}
return r;
}
/**
* 字节到字符串
* @param b
* @return
*/
public static String byte2Str(byte[] b)
{
String str = "";
String stmp = "";
for (int n = 0; n < b.length; n++) {
stmp = (Integer.toHexString(b[n] & 0XFF));
if (stmp.length() == 1)
str = str + "0" + stmp;
else
str = str + stmp;
}
return str;
}
}
- fileJiaMi.rar (2.1 MB)
- 下载次数: 1
发表评论
-
关于Android的webSocket的简单使用
2017-05-12 14:34 987使用第三方jar: autobahn-0.5.0.jar 连 ... -
Comparator自定义排序的使用
2017-05-11 14:18 749java对于集合的自定义排序方法有: Arrays.sort ... -
查看Android虚拟机文件相关命令
2017-05-02 14:12 608我们在虚拟机下添加文件后,想查看下文件是否正确创建,可在win ... -
android6.0创建文件问题
2017-05-02 12:58 587Android在6.0有了动态权限管理,在文件创建时就需要动态 ... -
xutils的http模块的简单使用
2017-04-28 16:05 527先导入xutils相关依赖: compile 'org.xut ... -
Litepal的简单使用
2017-04-27 17:21 642相关包下载地址:https://github.com/Lite ... -
Android下拉刷新上拉加载控件的使用
2017-04-21 10:46 852参考链接:http://www.jianshu.com/p/6 ... -
图片加载框架
2017-04-19 16:29 402图片加载框架: picasso ImageLoader -
Android的Service总结
2017-04-17 15:46 461参考链接:http://www.cnblogs.com/lwb ... -
解决ViewPager的addOnPageChangeListener不加载第一个的问题
2017-03-18 17:53 2649今天在使用ViewPager的时候发现个问题。 需求如下: ... -
clone方法的使用
2017-01-04 10:14 555由于Java有引用这一说,当两个变量指向同一块内存时,改变 ... -
Fragment无法切换问题
2016-12-16 14:57 2114Android有一个回收机制,当内存不足时,会自动回收相关内存 ... -
关于Material Design的CollapsingToolbarLayout初次使用
2016-12-16 13:38 614最近了解了下CollapsingToolbarLayout的使 ... -
MVP模式的学习
2016-12-10 15:15 676以前我写代码都是使用MVC模式,这种模式使Activity变得 ... -
Material Design:Android Design Support Library 介绍
2016-12-10 14:14 471参考链接 : https://blog.leancloud.c ... -
SpannableString简介
2016-12-10 14:03 424参考链接: http://www.cnblogs.com/ji ... -
getResources().getDrawable方法的废弃
2016-12-10 13:20 1236参考链接:http://www.jianshu.com/p/e ... -
关于AndroidStudio的Unsupported major.minor version 52.0异常
2016-12-10 13:15 2380参考链接:http://blog.csdn.net/fakin ... -
Android记录
2015-06-01 10:54 642http://tools.android-studio.org ... -
android自定义控件相关使用
2015-04-24 16:53 612用代码简单介绍下自定义控件的使用: 先看主activity: ...
相关推荐
"java实现文件加密解密" Java 实现文件的加密与解密是指利用 Java 语言将资源文件(包括图片、动画等类型)进行简单的加密和解密。这种策略的原因和好处是将准备好的资源存储在云上,使用时通过网络进行读取即可,...
本项目"文件加密解密(完整项目)"专注于利用C#进行文件的安全处理,确保数据在传输和存储时的隐私性。 一、C#加密技术基础 C#中实现文件加密主要依赖于.NET Framework提供的加密类库,如System.Security....
《深入理解ENC文件加密解密工具:以PrimaSoft Encryption Utility为例》 在信息安全日益重要的今天,文件加密解密工具成为保护数据隐私的关键工具。"ENC文件加密解密工具",特别是PrimaSoft Encryption Utility,是...
文件加密解密系统是一种用于保护数据安全的重要工具,它能够对个人或组织的敏感信息进行加密,确保在传输或存储时不受未经授权的访问。在这个信息化的时代,数据安全已经成为企业和个人都必须关注的问题,因此,了解...
【标题】"全能文件加密解密源码.zip"是一个包含Visual Studio工程的压缩包,它提供了C#语言编写的源代码,用于实现文件的加密和解密功能。这个项目对于那些想要深入理解加密和解密机制,或者需要在自己的应用程序中...
本文将深入探讨“文件加密解密软件”的基础知识、工作原理以及如何选择和使用这类软件。 首先,让我们理解文件加密的基本概念。文件加密是一种通过特定算法将文件中的数据转化为无法直接读取的形式,这一过程称为...
在C#编程环境中,文件加密和解密是保护数据安全的重要技术。...以上就是关于"C#文件加密解密"这一主题的主要知识点。通过理解和应用这些知识,开发者可以在C#环境中构建自己的文件加密和解密系统,从而保障数据的安全。
本文将深入探讨“一款小巧的任意文件加密解密软件”,该软件利用了3DES加密算法,确保了数据的高度安全。同时,我们还会涉及到MD5哈希函数,它是文件完整性验证的重要工具。 3DES(Triple Data Encryption Standard...
根据提供的文件信息,本文将对"C语言文件加密解密系统"进行详细解析,重点在于理解其功能、工作原理以及核心代码实现。 ### C语言文件加密解密系统 #### 概述 该系统是一个基于C语言编写的文件加密解密工具,能够...
在这个特定的案例中,"MFC实现文本文件加密解密"是一个使用MFC框架编写的程序,它允许用户对文本文件进行加密和解密操作,确保敏感数据在传输或存储时的安全性。 在VC2010环境下,开发者通常会利用MFC的类库,如...
标题中的“移动定制版华为HG8546M配置文件加密解密工具”是指专为华为 HG8546M 路由器设计的一款软件工具,主要用于处理该型号路由器的配置文件。这款工具能够对配置文件进行加密和解密操作,确保数据的安全性和隐私...
文件加密解密代码
"文件加密解密工具源代码"提供了一种解决方案,它利用多种加密算法来保护数据,确保信息不被未经授权的用户访问。接下来,我们将深入探讨文件加密与解密的相关知识点。 **一、加密的基本概念** 加密是一种信息安全...
在VB(Visual Basic)编程环境中,我们可以创建一个简单的文件加密解密程序,这在保护敏感数据和隐私方面具有重要意义。本示例将介绍如何利用基本的加密算法来实现这一功能。VB提供了丰富的功能,让我们能够方便地...
总的来说,"小锁匠"是一款实用的文件加密解密工具,适用于需要批量处理文件安全的场景。其基于.NET Framework开发,可能采用了对称加密算法,并提供了源码供用户研究和定制。在使用时,用户应确保计算机已安装了合适...
利用汇编语言编写的文件加密解密程序,有详细解释说明、源代码
"实用小程序 全文件加密解密文件加密解密"这个标题暗示了我们关注的是一个用于保护文件安全的小程序,它提供了文件的加密和解密功能。这类工具通常用于确保敏感数据在传输或存储时不被未经授权的人员访问。 描述中...
米牛文件加密解密专家是一款专业强劲的文件加密解密软件,采用多线程加解密方式,加密速度快、安全性高、资源消耗低,不仅拥有文件/文件夹加密、解密、打开等功能,而且对本地加密/解密,更安全、更高效,并且软件...
Java 文件加密解密器 可对所有文件进行加密和解密,第一次运行加密,第二次运行解密。
首先,我们需要创建一个VB工程,工程名称可以自定义,例如“文本文件加密解密系统”。在该工程中,我们将设计一个窗体作为用户界面,窗体名称同样可以自定义,如“EncryptionDecryptionForm”。 #### 控件布局与...