Java编程和android移动开发通用的常见加密算法.docx

上传人:b****6 文档编号:5962368 上传时间:2023-01-02 格式:DOCX 页数:22 大小:21.77KB
下载 相关 举报
Java编程和android移动开发通用的常见加密算法.docx_第1页
第1页 / 共22页
Java编程和android移动开发通用的常见加密算法.docx_第2页
第2页 / 共22页
Java编程和android移动开发通用的常见加密算法.docx_第3页
第3页 / 共22页
Java编程和android移动开发通用的常见加密算法.docx_第4页
第4页 / 共22页
Java编程和android移动开发通用的常见加密算法.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

Java编程和android移动开发通用的常见加密算法.docx

《Java编程和android移动开发通用的常见加密算法.docx》由会员分享,可在线阅读,更多相关《Java编程和android移动开发通用的常见加密算法.docx(22页珍藏版)》请在冰豆网上搜索。

Java编程和android移动开发通用的常见加密算法.docx

Java编程和android移动开发通用的常见加密算法

Java编程android移动开发通用

常见加密算法和摘要算法

By174997990@

第一部分:

测试代码,复制到项目即可.注意类名

importjava.io.IOException;

importjava.security.PrivateKey;

importjava.security.PublicKey;

publicclassMain{

/**

*@paramargs

*@throwsException

*@throwsIOException

*/

publicstaticvoidmain(String[]args)throwsException{

StringoldString,encodeString,decodeString,keyString;

byte[]encodeBytes,decodeBytes;

oldString="汉a字a喊喊!

@#$%^&*()-=+_~`<>?

:

;\\\"|}]{{[喊汉a字a喊喊喊汉a字a喊喊喊汉a字a喊喊!

@#$%^&*()-=+_~`<>?

:

;\\\"|}]{{[喊汉a字a喊喊喊汉a字a喊喊喊汉a字a喊喊!

@#$%^&*()-=+_~`<>?

:

;\\\"|}]{{[喊汉a字a喊喊喊汉a字a喊喊喊汉a字a喊喊!

@#$%^&*()-=+_~`<>?

:

;\\\"|}]{{[喊汉a字a喊喊喊汉a字a喊喊喊汉a字a喊喊!

@#$%^&*()-=+_~`<>?

:

;\\\"|}]{{[喊汉a字a喊喊喊汉a字a喊喊喊汉a字a喊喊!

@#$%^&*()-=+_~`<>?

:

;\\\"|}]{{[喊汉aQQ:

174997990字a喊喊喊汉a字a喊喊!

@#$%^&*()-=+_~`<>?

:

;\\\"|}]{{[喊汉a字a喊喊喊汉a字a喊喊喊汉a字a喊喊!

@#$%^&*()-=+_~`<>?

:

;\\\"|}]{{[喊汉a字a喊喊喊汉a字a喊喊喊汉a字a喊喊!

@#$%^&*()-=+_~`<>?

:

;\\\"|}]{{[喊汉a字a喊喊喊汉a字a喊喊喊汉a字a喊喊!

@#$%^&*()-=+_~`<>?

:

;\\\"|}]{{[喊汉a字a喊喊喊汉a字a喊喊喊汉a字a喊喊!

@#$%^&*()-=+_~`<>?

:

;\\\"|}]{{[喊汉a字syd168@a喊喊喊汉a字a喊喊!

@#$%^&*()-=+_~`<>?

:

;\\\"|}]{{[喊汉a字a喊喊喊汉a字a喊喊喊汉a字a喊喊!

@#$%^&*()-=+_~`<>?

:

;\\\"|}]{{[喊汉a字a喊喊喊汉a字a喊喊喊汉a字a喊喊!

@#$%^&*()-=+_~`<>?

:

;\\\"|}]{{[喊汉a字a喊喊喊汉a字a喊喊喊汉a字a喊喊!

@#$%^&*()-=+_~`<>?

:

;\\\"|}]{{[喊汉a字a喊喊喊汉a字a喊喊喊汉a字a喊喊!

@#$%^&*()-=+_~`<>?

:

;\\\"|}]{{[喊汉a字a喊喊喊汉a字a喊喊喊汉a字a喊喊!

@#$%^&*()-=+_~`<>?

:

;\\\"|}]{{[喊汉a字a喊喊喊汉a字a喊喊喊汉a字a喊喊!

@#$%^&*()-=+_~`<>?

:

;\\\"|}]{{[喊汉a字a喊喊喊汉a字a喊喊喊汉a字a喊喊!

@#$%^&*()-=+_~`<>?

:

;\\\"|}]{{[喊汉a字a喊喊喊汉a字a喊喊喊汉a字a喊喊!

@#$%^&*()-=+_~`<>?

:

;\\\"|}]{{[喊汉a字a喊喊喊汉a字a喊喊喊汉a字a喊喊!

@#$%^&*()-=+_~`<>?

:

;\\\"|}]{{[喊汉a字a喊喊喊汉a字a喊喊喊";

System.out.println("=============designedby174997990@======");

//测试Base64编码

System.out.println("====================Base64test=================");

encodeString=MyEncryption.Base64.encode(oldString.getBytes());//以系统默认编码方式转换为字节数组

byte[]bb=MyEncryption.Base64.decode(encodeString);//返回的字符串就是系统默认编码

decodeString=newString(bb);

System.out.println("原始字符串==>"+oldString);

System.out.println("Base64编码==>"+encodeString);

System.out.println("Base64解码==>"+decodeString);

System.out.println("解码后和原串==>"+(decodeString.equals(oldString)?

"完全一样":

"不同"));

//测试DES加密

System.out.println("\n====================DESencrypytest=================");

keyString="01234567";

encodeString=MyEncryption.MyDES.encryptDES(oldString,keyString);

decodeString=MyEncryption.MyDES.decryptDES(encodeString,keyString);

decodeString=newString(decodeString.getBytes());

System.out.println("原始字符串==>"+oldString);

System.out.println("DES加密后==>"+encodeString);

System.out.println("DES解密后==>"+decodeString);

System.out.println("解密后和原串==>"+(decodeString.equals(oldString)?

"完全一样":

"不同"));

//测试3DES加密

keyString="abcdefghigk";

System.out.println("\n====================3DESencrypytest=================");

encodeString=MyEncryption.My3DES.encrypt3DES(oldString,keyString);

decodeString=MyEncryption.My3DES.decrypt3DES(encodeString,keyString);

decodeString=newString(decodeString.getBytes());

System.out.println("原始字符串==>"+oldString);

System.out.println("3DES加密后==>"+encodeString);

System.out.println("3DES解密后==>"+decodeString);

System.out.println("解密后和原串==>"+(decodeString.equals(oldString)?

"完全一样":

"不同"));

//测试AES加密

keyString="abcdefsdfsdfghigk";

System.out.println("\n====================AESencrypytest=================");

encodeString=MyEncryption.MyAES.encryptAES(oldString,keyString);

decodeString=MyEncryption.MyAES.decryptAES(encodeString,keyString);

decodeString=newString(decodeString.getBytes());

System.out.println("原始字符串==>"+oldString);

System.out.println("AES加密后==>"+encodeString);

System.out.println("AES解密后==>"+decodeString);

System.out.println("解密后和原串==>"+(decodeString.equals(oldString)?

"完全一样":

"不同"));

//测试RSA加密

System.out.println("\n====================RSAencrypytest=================");

//第一次调用的时候需要执行!

!

!

会将生成的秘钥保存到文件中,供后期加密解密使用,而且留给自己的私钥一定要从系统中删除!

!

!

//KeyPairkeyPair=MyEncryption.MyRSA.generateKeyPair(MyEncryption.MyRSA.KEY_SIZE);

//初始化完后,即可从KeyPair中获取秘钥对,但这只适用于测试

//PublicKeypublicKey0=keyPair.getPublic();

//PrivateKeyprivateKey0=keyPair.getPrivate();

//从文件中获取秘钥,

PublicKeypublicKey=(PublicKey)MyEncryption.MyRSA.getKeyFromFile(MyEncryption.MyRSA.PUBLIC_KEY_FILE);

PrivateKeyprivateKey=(PrivateKey)MyEncryption.MyRSA.getKeyFromFile(MyEncryption.MyRSA.PRIVATE_KEY_FILE);

encodeBytes=MyEncryption.MyRSA.publicEncrypt(publicKey,oldString);

encodeString=newString(MyEncryption.Base64.encode(encodeBytes).getBytes(),"utf-8");

decodeBytes=MyEncryption.MyRSA.privateDecrypt(privateKey,MyEncryption.Base64.decode(encodeString));

decodeString=newString(decodeBytes,"utf-8");

System.out.println("待加密的字符串==>"+oldString);

System.out.println("RSA公钥加密后==>"+encodeString);

System.out.println("RSA私钥解密后==>"+decodeString);

System.out.println("解密后和原串==>"+(decodeString.equals(oldString)?

"完全一样":

"不同"));

//==========================

encodeBytes=MyEncryption.MyRSA.privateEncrypt(privateKey,oldString);

encodeString=newString(MyEncryption.Base64.encode(encodeBytes).getBytes(),"utf-8");

decodeBytes=MyEncryption.MyRSA.publicDecrypt(publicKey,MyEncryption.Base64.decode(encodeString));

decodeString=newString(decodeBytes,"utf-8");

System.out.println("\n待加密的字符串==>"+oldString);

System.out.println("RSA私钥加密后==>"+encodeString);

System.out.println("RSA公钥解密后==>"+decodeString);

System.out.println("解密后和原串==>"+(decodeString.equals(oldString)?

"完全一样":

"不同"));

//测试MD5摘要算法

System.out.println("\n====================MD5MessageDigesttest=================");

encodeString=MyEncryption.MyMD5.getMD5String_new(oldString);

System.out.println("原始字符串==>"+oldString);

System.out.println("MD5摘要为==>"+encodeString);

System.out.println("摘要长度为==>"+encodeString.length());

//测试SHA摘要算法

System.out.println("\n====================SHAMessageDigesttest=================");

encodeString=MyEncryption.MySHA.getSHAString(oldString);

System.out.println("原始字符串==>"+oldString);

System.out.println("SHA摘要为==>"+encodeString);

System.out.println("摘要长度为==>"+encodeString.length());

}

}

第二部分:

算法部分,复制到项目即可.注意类名!

!

!

importjava.io.ByteArrayOutputStream;

importjava.io.FileInputStream;

importjava.io.FileNotFoundException;

importjava.io.FileOutputStream;

importjava.io.IOException;

importjava.io.ObjectInputStream;

importjava.io.ObjectOutputStream;

importjava.io.UnsupportedEncodingException;

importjava.security.Key;

importjava.security.KeyPair;

importjava.security.KeyPairGenerator;

importjava.security.MessageDigest;

importjava.security.PrivateKey;

importjava.security.PublicKey;

importjava.security.SecureRandom;

importjava.security.interfaces.RSAPrivateKey;

importjava.security.interfaces.RSAPublicKey;

importjavax.crypto.Cipher;

importjavax.crypto.KeyGenerator;

importjavax.crypto.SecretKey;

importjavax.crypto.SecretKeyFactory;

importjavax.crypto.spec.DESedeKeySpec;

importjavax.crypto.spec.IvParameterSpec;

importjavax.crypto.spec.SecretKeySpec;

publicclassMyEncryption{

//staticfinalStringCHAR_SET="utf-8";//加解密统一使用的编码方式

//======================DES=======================

publicstaticclassMyDES{

/**

*加密一串字符

*@paramplaneString待加密的字符串,加密中被转为UTF-8编码类型

*@paramkeyString秘钥,最多8字符,即64位秘钥长度,不能为汉子等多字节字符!

这里不足长度的double补空格,多余的删除

*@return返回加密后的字符串,转为Base64编码

*@throwsException

*/

publicstaticStringencryptDES(StringplaneString,StringkeyString)throwsException{

//秘钥只能为0-8个字符,即64位长度秘钥

keyString=keyString.length()>8?

keyString.substring(0,8):

keyString;

while(keyString.length()<8)

keyString=keyString+"";

IvParameterSpeczeroIv=newIvParameterSpec(keyString.getBytes());

SecretKeySpecsks=newSecretKeySpec(keyString.getBytes(),"DES");

Ciphercipher=Cipher.getInstance("DES/CBC/PKCS5Padding");

cipher.init(Cipher.ENCRYPT_MODE,sks,zeroIv);

byte[]encryptedData=cipher.doFinal(planeString.getBytes());

//returnnewString(encryptedData);//如果不需要base64编码,(加密结果中包含乱码!

),注释下面一句

returnBase64.encode(encryptedData);//转换为常见字符

//returnnewBASE64Encoder().encode(encryptedData);

}

/**

*解密经过加密的字符串

*@paramdecryptString要解密的字符串,utf-8编码类型的并且基于Base64编码后的

*@paramkeyString秘钥,最多8字符,即64位秘钥长度,不能为汉子等多字节字符!

这里不足长度的double补空格,多余的删除

*@return返回utf-8编码类型的字符串,可根据需要进行编码转换

*可以使用newString(decodeString.getBytes(),"新编码")进行编码转换,

*decodeString.getBytes(),可以获取基于系统缺省编码(项目代码编码)的串

*System.getProperty("file.encoding");获取系统编码类型的字符串

*@throwsException

*/

publicstaticStringdecryptDES(StringdecryptString,StringkeyString)throwsException{

//秘钥只能为0-8个字符,即64位长度秘钥

keyString=keyString.length()>8?

keyString.substring(0,8):

keyString;

while(keyString.length()<8)

keyString=keyString+"";

byte[]byteMi=Base64.decode(decryptString);

//byte[]byteMi=newBASE64Decoder().decodeBuffer(decryptString);

//byte[]byteMi=decryptString.getBytes();//如果原始加密串没有经过base64转换启用这句,注释上句

IvParameterSpeczeroIv=newIvParameterSpec(keyString.getBytes());

SecretKeySpecsks=newSecretKeySpec(keyString.getBytes(),"DES");

Ciphercipher=Cipher.getInstance("DES/CBC/PKCS5Padding");

cipher.init(Cipher.DECRYPT_MODE,sks,zeroIv);

byte[]decryptedData=cipher.doFinal(byteMi);

returnnewString(decryptedData);//这条语句不能写为:

returnnewString(decryptedData,encoding)

}

}

//======================3DES====================

publicstaticclassMy3DES{

/**

*3DES加密

*@paramplaneString普通文本

*@paramkeyString秘钥,最多24个字符,即192位秘钥长度,不能为汉子等多字节字符!

这里不足长度的double补空格,多余的删除

*@return返回经过加

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1