Java编程和android移动开发通用的常见加密算法.docx
《Java编程和android移动开发通用的常见加密算法.docx》由会员分享,可在线阅读,更多相关《Java编程和android移动开发通用的常见加密算法.docx(22页珍藏版)》请在冰豆网上搜索。
![Java编程和android移动开发通用的常见加密算法.docx](https://file1.bdocx.com/fileroot1/2023-1/2/6bd0920c-e78b-4e3f-b03d-bbde62084c61/6bd0920c-e78b-4e3f-b03d-bbde62084c611.gif)
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返回经过加