之前有兴趣研究了一下java的加密与解密的方法,发现市面上有好多种加密解密方式,在这里整理了一下。

目录

1.BASE64加密/解密

2.MD5(Message Digest Algorithm)加密

3.DES(Data Encryption Standard)对称加密/解密

4.AES(Advanced Encryption Standard) 加密/解密

5.HMAC(Hash Message Authentication Code,散列消息鉴别码)

6.恺撒加密

7.SHA(Secure Hash Algorithm,安全散列算法)

8.RSA 加密/解密

9.PBE 加密/解密


1.BASE64加密/解密

Base64 编码是我们程序开发中经常使用到的编码方法,它用 64 个可打印字符来表示二进制数据。这 64 个字符是:小写字母 a-z、大写字母 A-Z、数字 0-9、符号"+"、"/"(再加上作为垫字的"=",实际上是 65 个字符),其他所有符号都转换成这个字符集中的字符。Base64 编码通常用作存储、传输一些二进制数据编码方法,所以说它本质上是一种将二进制数据转成文本数据的方案。

通常用作对二进制数据进行加密,示例:

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;public class Base64Util {/**** BASE64解密* @param key* @return* @throws Exception*/public static byte[] decryBASE64(String key) throws Exception{return (new BASE64Decoder()).decodeBuffer(key);}/**** BASE64加密* @param key* @return* @throws Exception*/public static String encryptBASE64(byte[] key) throws Exception{return (new BASE64Encoder()).encode(key);}}

2.MD5(Message Digest Algorithm)加密

MD5 是将任意长度的数据字符串转化成短小的固定长度的值的单向操作,任意两个字符串不应有相同的散列值。因此 MD5 经常用于校验字符串或者文件,因为如果文件的 MD5 不一样,说明文件内容也是不一样的,如果发现下载的文件和给定的 MD5 值不一样,就要慎重使用。

MD5 主要用做数据一致性验证、数字签名和安全访问认证,而不是用作加密。比如说用户在某个网站注册账户时,输入的密码一般经过 MD5 编码,更安全的做法还会加一层盐(salt),这样密码就具有不可逆性。然后把编码后的密码存入数据库,下次登录的时候把密码 MD5 编码,然后和数据库中的作对比,这样就提升了用户账户的安全性。

是一种单向加密算法,只能加密不能解密,示例:

import java.security.MessageDigest;public class MD5Util {public static final String KEY_MD5 = "MD5";  /**** MD5加密(生成唯一的MD5值)* @param data* @return* @throws Exception*/public static byte[] encryMD5(byte[] data) throws Exception {MessageDigest md5 = MessageDigest.getInstance(KEY_MD5);md5.update(data);return md5.digest();}}

3.DES(Data Encryption Standard)对称加密/解密

DES 是一种对称加密算法,所谓对称加密算法就是:加密和解密使用相同密钥的算法。DES 加密算法出自 IBM 的研究,后来被美国政府正式采用,之后开始广泛流传。但近些年使用越来越少,因为 DES 使用 56 位密钥,以现代的计算能力,24 小时内即可被破解。

顺便说一下 3DES(Triple DES),它是 DES 向 AES 过渡的加密算法,使用 3 条 56 位的密钥对数据进行三次加密。是 DES 的一个更安全的变形。它以 DES 为基本模块,通过组合分组方法设计出分组加密算法。比起最初的 DES,3DES 更为安全。

使用 Java 实现 DES 加密解密,注意密码长度要是 8 的倍数。加密和解密的 Cipher 构造参数一定要相同,不然会报错。

数据加密标准算法,和BASE64最明显的区别就是有一个工作密钥,该密钥既用于加密、也用于解密,并且要求密钥是一个长度至少大于8位的字符串,示例:

import java.security.Key;
import java.security.SecureRandom;import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;public class DesUtil {private static Key key;private static String KEY_STR="myKey";private static String CHARSETNAME="UTF-8";private static String ALGORITHM="DES";static {try {//生成DES算法对象KeyGenerator generator=KeyGenerator.getInstance(ALGORITHM);//运用SHA1安全策略SecureRandom secureRandom=SecureRandom.getInstance("SHA1PRNG");//设置上密钥种子secureRandom.setSeed(KEY_STR.getBytes());//初始化基于SHA1的算法对象generator.init(secureRandom);//生成密钥对象key=generator.generateKey();generator=null;} catch (Exception e) {throw new RuntimeException(e);}}/**** 获取加密的信息* @param str* @return*/public static String getEncryptString(String str) {//基于BASE64编码,接收byte[]并转换成StringBASE64Encoder encoder = new BASE64Encoder();try {//按utf8编码byte[] bytes = str.getBytes(CHARSETNAME);//获取加密对象Cipher cipher = Cipher.getInstance(ALGORITHM);//初始化密码信息cipher.init(Cipher.ENCRYPT_MODE, key);//加密byte[] doFinal = cipher.doFinal(bytes);//byte[]to encode好的String 并返回return encoder.encode(doFinal);} catch (Exception e) {throw new RuntimeException(e);}}/**** 获取解密之后的信息* @param str* @return*/public static String getDecryptString(String str) {BASE64Decoder decoder = new BASE64Decoder();try {//将字符串decode成byte[]byte[] bytes = decoder.decodeBuffer(str);//获取解密对象Cipher cipher = Cipher.getInstance(ALGORITHM);//初始化解密信息cipher.init(Cipher.DECRYPT_MODE, key);//解密byte[] doFial = cipher.doFinal(bytes);return new String(doFial, CHARSETNAME);} catch (Exception e) {throw new RuntimeException(e);}}}

4.AES(Advanced Encryption Standard) 加密/解密

高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称 Rijndael 加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的 DES,已经被多方分析且广为全世界所使用。简单说就是 DES 的增强版,比 DES 的加密强度更高。

AES 与 DES 一样,一共有四种加密模式:电子密码本模式(ECB)、加密分组链接模式(CBC)、加密反馈模式(CFB)和输出反馈模式(OFB)。关于加密模式的介绍,推荐这篇文章:高级加密标准AES的工作模式(ECB、CBC、CFB、OFB)

示例代码:

import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;public class AESUtil {public static final String algorithm = "AES";// AES/CBC/NOPaddin// AES 默认模式// 使用CBC模式, 在初始化Cipher对象时, 需要增加参数, 初始化向量IV : IvParameterSpec iv = new// IvParameterSpec(key.getBytes());// NOPadding: 使用NOPadding模式时, 原文长度必须是8byte的整数倍public static final String transformation = "AES/CBC/NOPadding";public static final String key = "1234567812345678";/**** 加密* @param original 需要加密的参数(注意必须是16位)* @return* @throws Exception*/public static String encryptByAES(String original) throws Exception {// 获取CipherCipher cipher = Cipher.getInstance(transformation);// 生成密钥SecretKeySpec keySpec = new SecretKeySpec(key.getBytes(), algorithm);// 指定模式(加密)和密钥// 创建初始化向量IvParameterSpec iv = new IvParameterSpec(key.getBytes());cipher.init(Cipher.ENCRYPT_MODE, keySpec, iv);// cipher.init(Cipher.ENCRYPT_MODE, keySpec);// 加密byte[] bytes = cipher.doFinal(original.getBytes());return Base64Util.encryptBASE64(bytes);}/*** 解密* @param encrypted 需要解密的参数* @return* @throws Exception*/public static String decryptByAES(String encrypted) throws Exception {// 获取CipherCipher cipher = Cipher.getInstance(transformation);// 生成密钥SecretKeySpec keySpec = new SecretKeySpec(key.getBytes(), algorithm);// 指定模式(解密)和密钥// 创建初始化向量IvParameterSpec iv = new IvParameterSpec(key.getBytes());cipher.init(Cipher.DECRYPT_MODE, keySpec, iv);// cipher.init(Cipher.DECRYPT_MODE, keySpec);// 解密byte[] bytes = cipher.doFinal(Base64Util.decryBASE64(encrypted));return new String(bytes);}}

5.HMAC(Hash Message Authentication Code,散列消息鉴别码)

使用一个密钥生成一个固定大小的小数据块,即MAC,并将其加入到消息中,然后传输。接收方利用与发送方共享的密钥进行鉴别认证,示例:

import javax.crypto.KeyGenerator;
import javax.crypto.Mac;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;public class HMACUtil {public static final String KEY_MAC = "HmacMD5";  /**** 初始化HMAC密钥* @return* @throws Exception*/public static String initMacKey() throws Exception{KeyGenerator keyGenerator = KeyGenerator.getInstance(KEY_MAC);SecretKey secreKey = keyGenerator.generateKey();return Base64Util.encryptBASE64(secreKey.getEncoded());}/*** HMAC加密* @param data* @param key* @return* @throws Exception*/public static byte[] encryHMAC(byte[] data, String key) throws Exception{SecretKey secreKey = new SecretKeySpec(Base64Util.decryBASE64(key), KEY_MAC);Mac mac = Mac.getInstance(secreKey.getAlgorithm());mac.init(secreKey);return mac.doFinal();}}

6.恺撒加密

  • 在密码学中,恺撒密码是一种最简单并且最广为人知的加密技术。

  • 它是一种替换加密的技术,明文中的所欲字母都在字母表上向后(或向前)按照一个固定的数目进行偏移后被替换成密文。

  • 例如:当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推。

  • 这个加密方法是以恺撒的名字命名的,当年恺撒曾用此方法与其将军们进行联系。

  • 恺撒密码通常被座位其他更复杂的加密方法中的一个步骤。

示例代码:

public class KaisaUtil {/**** 使用凯撒加密方式加密数据* @param orignal 原文* @param key 密钥* @return 加密后的字符*/private static String encryptKaisa(String orignal, int key) {//将字符串转换为数组char[] chars = orignal.toCharArray();StringBuffer buffer = new StringBuffer();//遍历数组for(char aChar : chars) {//获取字符的ASCII编码int asciiCode = aChar;//偏移数据asciiCode += key;//将偏移后的数据转为字符char result = (char)asciiCode;//拼接数据buffer.append(result);}return buffer.toString();}/*** 使用凯撒加密方式解密数据** @param encryptedData :密文* @param key           :密钥* @return : 源数据*/private static String decryptKaiser(String encryptedData, int key) {// 将字符串转为字符数组char[] chars = encryptedData.toCharArray();StringBuilder sb = new StringBuilder();// 遍历数组for (char aChar : chars) {// 获取字符的ASCII编码int asciiCode = aChar;// 偏移数据asciiCode -= key;// 将偏移后的数据转为字符char result = (char) asciiCode;// 拼接数据sb.append(result);}return sb.toString();}public static void main(String[] args) {String str = "open fire";String encode = encryptKaisa(str, 3);System.out.println("加密后:"+encode);String decode = decryptKaiser(encode, 3);System.out.println("解密后:"+decode);}}

7.SHA(Secure Hash Algorithm,安全散列算法)

SHA全名叫做安全散列算法,是FIPS所认证的安全散列算法。能计算出一个数字消息所对应到的,长度固定的字符串(又称消息摘要)的算法。且若输入的消息不同,它们对应到不同字符串的机率很高。

数字签名等密码学应用中重要的工具,被广泛地应用于电子商务等信息安全领域,示例:

import java.security.MessageDigest;public class SHAUtil {public static final String KEY_SHA = "SHA";  public static final String ALGORITHM = "SHA-256";/**** SHA加密(比MD5更安全)* @param data* @return* @throws Exception*/public static byte[] encryptSHA(byte[] data) throws Exception{MessageDigest sha = MessageDigest.getInstance(KEY_SHA);sha.update(data);return sha.digest();}public static String SHAEncrypt(final String content) {try {MessageDigest sha = MessageDigest.getInstance(KEY_SHA);byte[] sha_byte = sha.digest(content.getBytes());StringBuffer hexValue = new StringBuffer();for (byte b : sha_byte) {//将其中的每个字节转成十六进制字符串:byte类型的数据最高位是符号位,通过和0xff进行与操作,转换为int类型的正整数。String toHexString = Integer.toHexString(b & 0xff);hexValue.append(toHexString.length() == 1 ? "0" + toHexString : toHexString);}return hexValue.toString();} catch (Exception e) {e.printStackTrace();}return "";}//SHA-256加密public static String SHA256Encrypt(String sourceStr) {MessageDigest md = null;try {md = MessageDigest.getInstance(ALGORITHM);} catch (NoSuchAlgorithmException e) {e.printStackTrace();}if (null != md) {md.update(sourceStr.getBytes());String digestStr = getDigestStr(md.digest());return digestStr;}return null;}private static String getDigestStr(byte[] origBytes) {String tempStr = null;StringBuilder stb = new StringBuilder();for (int i = 0; i < origBytes.length; i++) {tempStr = Integer.toHexString(origBytes[i] & 0xff);if (tempStr.length() == 1) {stb.append("0");}stb.append(tempStr);}return stb.toString();}
}

8.RSA 加密/解密

RSA算法是一种非对称加密算法,所谓非对称就是该算法需要一对密钥,若使用其中一个加密,则需要用另一个才能解密。目前它是最有影响力和最常用的公钥加密算法,能够抵抗已知的绝大多数密码攻击。从提出到现今的三十多年里,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一。

该算法基于一个的数论事实:将两个大质数相乘十分容易,但是想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。由于进行的都是大数计算,RSA 最快的情况也比 DES 慢上好几倍,比对应同样安全级别的对称密码算法要慢 1000 倍左右。所以 RSA 一般只用于少量数据加密,比如说交换对称加密的密钥。

使用 RSA 加密主要有这么几步:生成密钥对、公开公钥、公钥加密私钥解密、私钥加密公钥解密。

示例代码:

import com.sun.org.apache.xml.internal.security.utils.Base64;
import javax.crypto.Cipher;import org.apache.commons.io.FileUtils;import java.io.ByteArrayOutputStream;
import java.io.File;
import java.nio.charset.Charset;
import java.security.*;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;public class RsaUtil {/*** 生成密钥对并保存在本地文件中** @param algorithm : 算法* @param pubPath   : 公钥保存路径* @param priPath   : 私钥保存路径* @throws Exception*/private static void generateKeyToFile(String algorithm, String pubPath, String priPath) throws Exception {// 获取密钥对生成器KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(algorithm);// 获取密钥对KeyPair keyPair = keyPairGenerator.generateKeyPair();// 获取公钥PublicKey publicKey = keyPair.getPublic();// 获取私钥PrivateKey privateKey = keyPair.getPrivate();// 获取byte数组byte[] publicKeyEncoded = publicKey.getEncoded();byte[] privateKeyEncoded = privateKey.getEncoded();// 进行Base64编码String publicKeyString = Base64.encode(publicKeyEncoded);String privateKeyString = Base64.encode(privateKeyEncoded);// 保存文件FileUtils.writeStringToFile(new File(pubPath), publicKeyString, Charset.forName("UTF-8"));FileUtils.writeStringToFile(new File(priPath), privateKeyString, Charset.forName("UTF-8"));}/*** 从文件中加载公钥** @param algorithm : 算法* @param filePath  : 文件路径* @return : 公钥* @throws Exception*/private static PublicKey loadPublicKeyFromFile(String algorithm, String filePath) throws Exception {// 将文件内容转为字符串String keyString = FileUtils.readFileToString(new File(filePath), Charset.forName("UTF-8"));return loadPublicKeyFromString(algorithm, keyString);}/*** 从字符串中加载公钥** @param algorithm : 算法* @param keyString : 公钥字符串* @return : 公钥* @throws Exception*/private static PublicKey loadPublicKeyFromString(String algorithm, String keyString) throws Exception {// 进行Base64解码byte[] decode = Base64.decode(keyString);// 获取密钥工厂KeyFactory keyFactory = KeyFactory.getInstance(algorithm);// 构建密钥规范X509EncodedKeySpec keyspec = new X509EncodedKeySpec(decode);// 获取公钥return keyFactory.generatePublic(keyspec);}/*** 从文件中加载私钥** @param algorithm : 算法* @param filePath  : 文件路径* @return : 私钥* @throws Exception*/private static PrivateKey loadPrivateKeyFromFile(String algorithm, String filePath) throws Exception {// 将文件内容转为字符串String keyString = FileUtils.readFileToString(new File(filePath), Charset.forName("UTF-8"));return loadPrivateKeyFromString(algorithm, keyString);}/*** 从字符串中加载私钥** @param algorithm : 算法* @param keyString : 私钥字符串* @return : 私钥* @throws Exception*/private static PrivateKey loadPrivateKeyFromString(String algorithm, String keyString) throws Exception {// 进行Base64解码byte[] decode = Base64.decode(keyString);// 获取密钥工厂KeyFactory keyFactory = KeyFactory.getInstance(algorithm);// 构建密钥规范PKCS8EncodedKeySpec keyspec = new PKCS8EncodedKeySpec(decode);// 生成私钥return keyFactory.generatePrivate(keyspec);}/*** 使用密钥加密数据** @param algorithm      : 算法* @param input          : 原文* @param key            : 密钥* @param maxEncryptSize : 最大加密长度(需要根据实际情况进行调整)* @return : 密文* @throws Exception*/private static String encrypt(String algorithm, String input, Key key, int maxEncryptSize) throws Exception {// 获取Cipher对象Cipher cipher = Cipher.getInstance(algorithm);// 初始化模式(加密)和密钥cipher.init(Cipher.ENCRYPT_MODE, key);// 将原文转为byte数组byte[] data = input.getBytes();// 总数据长度int total = data.length;// 输出流ByteArrayOutputStream baos = new ByteArrayOutputStream();decodeByte(maxEncryptSize, cipher, data, total, baos);// 对密文进行Base64编码return Base64.encode(baos.toByteArray());}/*** 解密数据** @param algorithm      : 算法* @param encrypted      : 密文* @param key            : 密钥* @param maxDecryptSize : 最大解密长度(需要根据实际情况进行调整)* @return : 原文* @throws Exception*/private static String decrypt(String algorithm, String encrypted, Key key, int maxDecryptSize) throws Exception {// 获取Cipher对象Cipher cipher = Cipher.getInstance(algorithm);// 初始化模式(解密)和密钥cipher.init(Cipher.DECRYPT_MODE, key);// 由于密文进行了Base64编码, 在这里需要进行解码byte[] data = Base64.decode(encrypted);// 总数据长度int total = data.length;// 输出流ByteArrayOutputStream baos = new ByteArrayOutputStream();decodeByte(maxDecryptSize, cipher, data, total, baos);// 输出原文return baos.toString();}/*** 分段处理数据** @param maxSize : 最大处理能力* @param cipher  : Cipher对象* @param data    : 要处理的byte数组* @param total   : 总数据长度* @param baos    : 输出流* @throws Exception*/private static void decodeByte(int maxSize, Cipher cipher, byte[] data, int total, ByteArrayOutputStream baos) throws Exception {// 偏移量int offset = 0;// 缓冲区byte[] buffer;// 如果数据没有处理完, 就一直继续while (total - offset > 0) {// 如果剩余的数据 >= 最大处理能力, 就按照最大处理能力来加密数据if (total - offset >= maxSize) {// 加密数据buffer = cipher.doFinal(data, offset, maxSize);// 偏移量向右侧偏移最大数据能力个offset += maxSize;} else {// 如果剩余的数据 < 最大处理能力, 就按照剩余的个数来加密数据buffer = cipher.doFinal(data, offset, total - offset);// 偏移量设置为总数据长度, 这样可以跳出循环offset = total;}// 向输出流写入数据baos.write(buffer);}}
}

  加密算法的安全级别(Security Level of Cryptographic Algorithms):

安全级别 
(Security Level)
工作因素 
(Work Factor)
算法 
(Algorithms)
薄弱(Weak) O(240) DES, MD5
传统(Legacy) O(264) RC4, SHA-1
基准(Baseline) O(280) 3DES
标准(Standard) O(2128) AES-128, SHA-256
较高(High) O(2192) AES-192, SHA-384
超高(Ultra) O(2256) AES-256, SHA-512

9.PBE 加密/解密

PBE是一种基于口令的加密算法,使用口令代替其他对称加密算法中的密钥,其特点在于口令由用户自己掌管,不借助任何物理媒体;采用随机数(这里我们叫做盐)杂凑多重加密等方法保证数据的安全性。

PBE算法是对称加密算法的综合算法,常见算法PBEWithMD5AndDES,使用MD5和DES算法构建了PBE算法。将盐附加在口令上,通过消息摘要算法经过迭代获得构建密钥的基本材料,构建密钥后使用对称加密算法进行加密解密。

算法/密钥长度/默认密钥长度:

1.PBEWithMD5AndDES/56/56
2.PBEWithMD5AndTripleDES/112,168/168
3.PBEWithSHA1AndDESede/112,168/168
4.PBEWithSHA1AndRC2_40/40 to 1024/128

工作模式:CBC
填充方式:PKCS5Padding

示例代码:

import java.security.Key;
import java.security.SecureRandom;import javax.crypto.Cipher;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.PBEKeySpec;
import javax.crypto.spec.PBEParameterSpec;public class PBEUtil {public static final String ALGORITHM = "PBEWITHMD5andDES";public static final int ITERATION_COUNT = 100;public static byte[] initSalt() throws Exception{//实例化安全随机数SecureRandom random = new SecureRandom();return random.generateSeed(8);}/**** 转换密钥* @param password 密码* @return 密钥* @throws Exception*/private static Key toKey(String password) throws Exception{//密钥材料PBEKeySpec keySpec = new PBEKeySpec(password.toCharArray());//实例化SecretKeyFactory factory = SecretKeyFactory.getInstance(ALGORITHM);//生成密钥return factory.generateSecret(keySpec);}/**** 加密* @param data 待加密数据* @param password 密钥* @param salt* @return* @throws Exception*/public static byte[] encrypt(byte[] data, String password, byte[] salt) throws Exception{//转换密钥Key key = toKey(password);//实例化PBE参数材料PBEParameterSpec spec = new PBEParameterSpec(salt, ITERATION_COUNT);//实例化Cipher cipher = Cipher.getInstance(ALGORITHM);//初始化cipher.init(Cipher.ENCRYPT_MODE, key, spec);return cipher.doFinal(data);}/**** 解密* @param data 待解密数据* @param password 密钥* @param salt* @return* @throws Exception*/public static byte[] decrypt(byte[] data, String password, byte[] salt) throws Exception{//转换密钥Key key = toKey(password);//实例化PBE参数材料PBEParameterSpec spec = new PBEParameterSpec(salt, ITERATION_COUNT);//实例化Cipher cipher = Cipher.getInstance(ALGORITHM);//初始化  cipher.init(Cipher.DECRYPT_MODE, key, spec);//执行操作  return cipher.doFinal(data);  }private static String showByteArray(byte[] data) {if(null == data) {return null;}StringBuilder sb = new StringBuilder();for(byte b : data) {sb.append(b).append(",");}sb.deleteCharAt(sb.length()-1);sb.append("");return sb.toString();}public static void main(String[] args) throws Exception{byte[] salt = initSalt();System.out.println("salt:"+showByteArray(salt));String password = "1111";System.out.println("口令:"+password);String data = "PBE数据";System.out.println("加密前数据:String:"+data);System.out.println("加密前数据:byte[]:"+showByteArray(data.getBytes()));byte[] encryptData = encrypt(data.getBytes(), password, salt);System.out.println("加密后数据:byte[]:"+showByteArray(encryptData));byte[] decryptData = decrypt(encryptData, password, salt);System.out.println("解密后数据: byte[]:"+showByteArray(decryptData));System.out.println("解密后数据: string:"+new String(decryptData));}
}

本篇文章参考了以下两位的文章,感谢

https://www.jianshu.com/p/26adec49cb34

https://www.jianshu.com/p/213d69ac27b3

JAVA各种加密与解密方式相关推荐

  1. Java各种加密和解密方式

    加密算法 文章1:https://www.cnblogs.com/xibushijie/p/12851771.html 文章2:https://blog.csdn.net/weixin_3706959 ...

  2. java dsa加密与解密_Java DSA 加密 | 解密

    Java DSA 加密 | 解密 什么是DSA ? DSA (Digital Signature Algorithm) 是 Schnorr 和 ElGamal 签名算法的变种,被美国 NIST 作为 ...

  3. java 文本文件加密 文本文件解密

    import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.io.*; import java.secu ...

  4. Java cipher加密与解密

    javax.crypto.Cipher类提供加密和解密功能,该类是JCE框架的核心. ENCRYPT_MODE,加密数据 DECRYPT_MODE,解密数据 WRAP_MODE,将一个Key封装成字节 ...

  5. 【Android】Android加密和解密方式

    一.不可逆加密 不可逆加密算法的特征是加密过程中不需要使用密钥,输入明文后由系统直接经过加密算法处理成密文,这种加密后的数据是无法被解密的,只有重新输入明文,并再次经过同样不可逆的加密算法处理,得到相 ...

  6. java 密码解密_【java密码加密与解密】

    以下两个类可以很方便的完成字符串的加密和解密: 加密:CryptHelper.encrypt(password) 解密:CrypHelper.decrypt(password) 代码如下: Crypt ...

  7. java base64加密与解密

    目录 前言 一.base64加密与解密 1. base64有填充的编码与解码 2. base64无填充的编码与解码 二.MIME友好型base64加密与解密 前言 Base64 编码会将字符串编码得到 ...

  8. JAVA——RSA加密与解密

    基本概念 Base64:Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法. RSA: RSA加密算法是一种非对称加密算法 ...

  9. java word 加密_如何通过Java实现加密、解密Word文档

    前言 对一些重要文档,我们为保证其文档内容不被泄露,常需要对文件进行加密,查看文件时,需要正确输入密码才能打开文件.下面介绍了一种比较简单的方法给Word文件加密以及如何给已加密的Word文件解除密码 ...

最新文章

  1. mysql中FIND_IN_SET的使用方法
  2. 用神经网络分类矩阵和矩阵的转置
  3. 任务中断间的同步与通信概述
  4. Cocos游戏引擎3D特效全新升级 更流畅更炫酷
  5. 机器学习模型的性能指标
  6. Python is 和 == 区别 - Python零基础入门教程
  7. Spring学习笔记:第一个Spring Boot程序HelloWorld
  8. 汇编语言转为c语言,如何把汇编语言转换成C语言
  9. Office 2016 到底有没有更新?
  10. 【iOS-cocos2d-X 游戏开发之八】使用Lua脚本进行游戏开发(基础篇)
  11. java jvm 查看内存_JVM内存状况查看方法和分析工具(下)
  12. hualinux0.6 网络篇:你懂得路由器的种类吗?
  13. CODESYS Softmotion(一)功能介绍
  14. 非常全面详细的Sklearn介绍
  15. 10.创建一个日期类MyDate, 包含年year、月month、日day三个属性
  16. Unity 草的制作
  17. 阿里云云服务器无法通过公网ip地址访问网站的解决方法
  18. 达梦数据库SYSDBA密码攻略
  19. Opencv项目实战:07 人脸识别和考勤系统
  20. java.acp是什么,ACP是什么?看这一篇就够啦

热门文章

  1. python检测微信好友是否删除_基于Python+adb实现微信是否好友检测
  2. 【精华】非科班通往计算机之路的书籍天梯推荐
  3. CH8-HarmonyOS流转架构解析
  4. 重建 nextcloud 索引,通过非 nextcloud 客户端(手机、PC、网页端)途径放入 nextcloud 目录的文件
  5. TensorRT实现RetinaFace推理加速(一)
  6. 机器人工程的工作与考研之困惑“学历与待遇”补充
  7. 顺丰丰桥接口之下订单接口,适用于第三方系统对接
  8. mysql编写存储过程给员工加工资_一个增加员工工资的数据库存储过程
  9. 弘辽科技:拼多多搜索自定义技巧,学会这三步日出三百单
  10. 词嵌入必读论文集推荐-AMiner