admin 管理员组文章数量: 1087131
RSA和MD5加密(Java和JavaScript)
RSA和MD5加密(Java和JavaScript)
- 生成公钥私钥
- RSA
- Java
- JavaScript
- MD5
- Java
- JavaScript
- JS相关插件
生成公钥私钥
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.SecureRandom;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.util.Base64;
import java.util.HashMap;
import java.util.Map;public class Wan {public static Map<String,String> generateKeyPair() throws Exception{int KEYSIZE = 1024;// KeyPairGenerator类用于生成公钥和私钥对,基于RSA算法生成对象KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");// 初始化密钥对生成器,密钥大小为96-1024位keyPairGen.initialize(KEYSIZE,new SecureRandom());// 生成一个密钥对,保存在keyPair中KeyPair keyPair = keyPairGen.generateKeyPair();// 得到私钥RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();// 得到公钥RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic();Base64.Encoder encoder = Base64.getEncoder();// 得到公钥字符串String publicKeyBase64 = encoder.encodeToString(publicKey.getEncoded());// 得到私钥字符串String privateKeyBase64 = encoder.encodeToString(privateKey.getEncoded());Map<String,String> keyPairMap = new HashMap<>();keyPairMap.put("publicKey",publicKeyBase64);keyPairMap.put("privateKey",privateKeyBase64);return keyPairMap;}public static void main(String[] args) throws Exception {System.out.println(generateKeyPair());}
}
RSA
Java
加密
package com.da;import com.alibaba.fastjson.JSON;
import org.springframework.util.Assert;import javax.crypto.Cipher;
import java.io.ByteArrayOutputStream;
import java.security.KeyFactory;
import java.security.PublicKey;
import java.security.spec.X509EncodedKeySpec;
import java.util.Arrays;
import java.util.Base64;
import java.util.HashMap;
import java.util.Map;public class Wan {// MAX_DECRYPT_BLOCK 应等于密钥长度/8(1byte=8bit),所以当密钥位数为2048时,最大解密长度应为256.// 128 对应 1024,256对应2048private static final int KEYSIZE = 1024;// RSA最大加密明文大小private static final int MAX_ENCRYPT_BLOCK = 117;// RSA最大解密密文大小private static final int MAX_DECRYPT_BLOCK = KEYSIZE / 8;public static void main(String[] args) {// 公钥String rsaPublicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDuZddJUu2pz2EPfMwBckbdJD5AGtgR75JbT6JU0PvOm0y/vS8fW/Rbnnlkknir7M8R+lkXchgcREfuRQ0U1iW1JZYG0BTqezR2PHJfWAoScp6az1aA+Toa1k/Y8Gyhs4JKDB8+hjeMFTtW0FIR8u+eByQ9nTrcZ0oZ6Hr1AX7G/QIDAQAB";// 需要加密的内容1Map<String,String> MData1 = new HashMap<>();MData1.put("今天是啥日子","20230501");MData1.put("nijiazhunali","真在地球上");// 用公钥,将查询参数加密String encrypt1 = encryptRSAByPublicKey(JSON.toJSONString(MData1), rsaPublicKey);System.out.println(encrypt1);// 需要加密的内容2String MData2 = "0123456789abcdefgxyzwzyxgfedcba9876543210";// 用公钥,将查询参数加密String encrypt2 = encryptRSAByPublicKey(MData2, rsaPublicKey);System.out.println(encrypt2);}public static String encryptRSAByPublicKey(String json,String rsaPublicKey){Assert.hasText(json,"明文不能为空");Assert.hasText(rsaPublicKey,"公钥不能为空");String cipherText = "";try{Base64.Decoder decoder = Base64.getDecoder();byte[] decode = decoder.decode(rsaPublicKey);PublicKey rsaKey = KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(decode));Cipher cipher = Cipher.getInstance("RSA");cipher.init(Cipher.ENCRYPT_MODE,rsaKey);//RSA加密超过117报错,采用分段加密byte[] srcBytes = json.getBytes("UTF-8");ByteArrayOutputStream out = new ByteArrayOutputStream();for (int i = 0; i < srcBytes.length; i += MAX_ENCRYPT_BLOCK) {byte[] subBytes = Arrays.copyOfRange(srcBytes, i, i + MAX_ENCRYPT_BLOCK);//分段加密后的密文byte[] subCipher = cipher.doFinal(subBytes);out.write(subCipher,0,subCipher.length);}byte[] bytes = out.toByteArray();Base64.Encoder encoder = Base64.getEncoder();cipherText = encoder.encodeToString(bytes);}catch (Exception ex){System.out.println("RSA加密异常:" + ex.getMessage());}return cipherText;}}
解密
package com.da;import com.alibaba.fastjson.JSON;
import org.springframework.util.Assert;import javax.crypto.Cipher;
import java.io.ByteArrayOutputStream;
import java.security.KeyFactory;
import java.security.PrivateKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.util.Arrays;
import java.util.Base64;public class Wan {// MAX_DECRYPT_BLOCK 应等于密钥长度/8(1byte=8bit),所以当密钥位数为2048时,最大解密长度应为256.// 128 对应 1024,256对应2048private static final int KEYSIZE = 1024;// RSA最大加密明文大小private static final int MAX_ENCRYPT_BLOCK = 117;// RSA最大解密密文大小private static final int MAX_DECRYPT_BLOCK = KEYSIZE / 8;public static void main(String[] args) {// 私钥String rsaPrivateKey = "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAO5l10lS7anPYQ98zAFyRt0kPkAa2BHvkltPolTQ+86bTL+9Lx9b9FueeWSSeKvszxH6WRdyGBxER+5FDRTWJbUllgbQFOp7NHY8cl9YChJynprPVoD5OhrWT9jwbKGzgkoMHz6GN4wVO1bQUhHy754HJD2dOtxnShnoevUBfsb9AgMBAAECgYAZf+cxPp+RRE9bervPg8u0p8XI0ZY/BOMgxTnV3KyygsYI1FGQByPyENdnPIuPyDq175NMALY3f8453ETz75wEuXAXRQ+W2lBPqMhu6dV4OB52NT9rMxT2nEvOpzKkZoW9wZlBJMpoggGF+vhZnMBaAvLb7cZ7D/iOkJcdKhR6wQJBAPoHRC0oJcoBiX1KZKRbRPkn4/Wzst7zNtC13BiqKCgSJlc4a3+lHxTK79F1SXyliqgrDAj8E+/FjQLTJ89CkVkCQQD0F3ZqSeVFWgBaptu5SvUA2i5HWnsKISQajF4qnG+3CW/o8PMWgr+FJh9mWI/j2TQLdWZvkKDvwMmfjNv6vSpFAkEAgNa7t/VHO8f8/FYYdGUfrrBylIrr8l0r8vKznvYXyUZJAYruQhFpacKFP88LdjKrt6qvAfY7o8ONvVXn3rJzyQJAYMIoO6v9SYeK2mSIdyQiiOr0K27PlU1b3XZFIckPc9Q223UgN40u1F4vVkfHCkAgpGYubA097qxSgH+69+MirQJADzzbZ1Q8k8i/sXI7095T23+urpAyA+atq+lqtAcrQoCaMikeHmm7vO54XmDiB1gdf6jBBc0aA4oVAt+F3JmHqw==";// 需要解密的内容1String data1 = "iukMJ7c289IbprWCgY1l4v1AvKCILfy7BDgkOcGCI+Rb+KMDdzGcg9vPo/4lw4wredMT+DhW0qhgTMt1e4rY2mkjDPkrGpTBS6BukW0zPbxMuLM6bnBOTeW39JOD3/KFgZF0h5/Iks9LhV5P/22bAc//xaGhXZHxF2ESxAK2UtQ=";// 需要解密的内容2String data2 = "tikRmyRFFplxm5DuB10ZhHuvzPUEJ9MuWfQdkuGWzhMnZ13FupUqNFEBtGCLVd01vVHMuTgu19X02eCGUOYD1FleLODmslCp/vnIl0HJs/F2mU0uBND8lEj+Tk5yXvYbkDVK38lICKUUBJdfnoTQMMYRTJXRiki3gsQH+u+teXw=";String decrypt1 = decryptRSAByPrivateKey(data1, rsaPrivateKey);System.out.println("解密后的明文1:" + decrypt1);String decrypt2 = decryptRSAByPrivateKey(data2, rsaPrivateKey);System.out.println("解密后的明文2:" + decrypt2);// 去空格System.out.println(decrypt1.trim());System.out.println(decrypt2.trim());System.out.println(JSON.parseObject(decrypt1).get("nijiazhunali"));}public static String decryptRSAByPrivateKey(String cipherText,String rsaPrivateKey){Assert.hasText(cipherText,"密文不能为空");Assert.hasText(rsaPrivateKey,"私钥不能为空");String json = "";try{Base64.Decoder privateDecoder = Base64.getDecoder();byte[] decodePrivateKey = privateDecoder.decode(rsaPrivateKey);PrivateKey privateKey = KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(decodePrivateKey));Cipher cipher = Cipher.getInstance("RSA");cipher.init(Cipher.DECRYPT_MODE,privateKey);Base64.Decoder decoder = Base64.getDecoder();byte[] cipherBytes = decoder.decode(cipherText);ByteArrayOutputStream out = new ByteArrayOutputStream();for (int i = 0; i < cipherBytes.length; i += MAX_DECRYPT_BLOCK) {byte[] subBytes = Arrays.copyOfRange(cipherBytes, i, i + MAX_DECRYPT_BLOCK);//分段解密byte[] subCipher = cipher.doFinal(subBytes);out.write(subCipher,0,subCipher.length);}json = new String(out.toByteArray(),"UTF-8");}catch (Exception ex){System.out.println("RSA解密异常:" + ex.getMessage());}return json;}}
JavaScript
<script src="jsencrypt.min.js" type="text/javascript" charset="utf-8"></script>
function JiaMi() {// 需要加密的内容1var MData1 = {"今天是几月": "202305","nijiazhuna": "地球上"};// 需要加密的内容2var MData2 = "123456789abcdefggfedcba987654321"// 公钥var rsaPublicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDuZddJUu2pz2EPfMwBckbdJD5AGtgR75JbT6JU0PvOm0y/vS8fW/Rbnnlkknir7M8R+lkXchgcREfuRQ0U1iW1JZYG0BTqezR2PHJfWAoScp6az1aA+Toa1k/Y8Gyhs4JKDB8+hjeMFTtW0FIR8u+eByQ9nTrcZ0oZ6Hr1AX7G/QIDAQAB";// 开始加密var encrypt = new JSEncrypt();encrypt.setPublicKey(rsaPublicKey);// 对于非字符串的内容,加密时需要转换var m1 = encrypt.encrypt(JSON.stringify(MData1));console.log(m1);// 字符串可以直接加密var m2 = encrypt.encrypt(MData2);console.log(m2);
}function JieMi() {// 需要解密的内容1var M1 = "p+QvepVbHTmBpOQTIyNDyuP4J6jKOlwk3C87LeCcRU852NKLWBgAGJtVAvABGCRy4Td2uNohp/UL5r9tphy89AgkLfCp+IkUXZ6Q6ZN3JFdn0BU6SzedBU9+mK2PnouoSffZ5aCeNw/cax+PgX/4a0VM7priWFQcll5kV3Eto3Q=";// 需要解密的内容2var M2 = "xyNVjG1Xv4xTYeHv/43I4pwKt2HNpOXbJ1F3FGJ6t1IZ4uYKyY5vxlPTEdPnmLRRxyYHD4v87lhflSWW+XrJ1gkyA5923tqpHtkYwfLSU5Fp1Y0I3CSAhrThUsVDOcbrWHItNv5D1QOqtSpF1xIk2DA6v1F2p1Jn26JPnaJwuqM=";// 私钥var rsaPrivateKey = "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAO5l10lS7anPYQ98zAFyRt0kPkAa2BHvkltPolTQ+86bTL+9Lx9b9FueeWSSeKvszxH6WRdyGBxER+5FDRTWJbUllgbQFOp7NHY8cl9YChJynprPVoD5OhrWT9jwbKGzgkoMHz6GN4wVO1bQUhHy754HJD2dOtxnShnoevUBfsb9AgMBAAECgYAZf+cxPp+RRE9bervPg8u0p8XI0ZY/BOMgxTnV3KyygsYI1FGQByPyENdnPIuPyDq175NMALY3f8453ETz75wEuXAXRQ+W2lBPqMhu6dV4OB52NT9rMxT2nEvOpzKkZoW9wZlBJMpoggGF+vhZnMBaAvLb7cZ7D/iOkJcdKhR6wQJBAPoHRC0oJcoBiX1KZKRbRPkn4/Wzst7zNtC13BiqKCgSJlc4a3+lHxTK79F1SXyliqgrDAj8E+/FjQLTJ89CkVkCQQD0F3ZqSeVFWgBaptu5SvUA2i5HWnsKISQajF4qnG+3CW/o8PMWgr+FJh9mWI/j2TQLdWZvkKDvwMmfjNv6vSpFAkEAgNa7t/VHO8f8/FYYdGUfrrBylIrr8l0r8vKznvYXyUZJAYruQhFpacKFP88LdjKrt6qvAfY7o8ONvVXn3rJzyQJAYMIoO6v9SYeK2mSIdyQiiOr0K27PlU1b3XZFIckPc9Q223UgN40u1F4vVkfHCkAgpGYubA097qxSgH+69+MirQJADzzbZ1Q8k8i/sXI7095T23+urpAyA+atq+lqtAcrQoCaMikeHmm7vO54XmDiB1gdf6jBBc0aA4oVAt+F3JmHqw==";// 开始解密var decrypt = new JSEncrypt();decrypt.setPrivateKey(rsaPrivateKey);// 输出解密内容console.log(decrypt.decrypt(M1));console.log(decrypt.decrypt(M2));
}
MD5
Java
package com.da;import com.alibaba.fastjson.JSON;
import org.apachemons.codec.digest.DigestUtils;import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Map;public class Wan {public static void main(String[] args) throws UnsupportedEncodingException {// 需要加密的内容1Map<String,String> MData1 = new HashMap<>();MData1.put("今天是啥日子","20230501");MData1.put("nijiazhunali","真在地球上");// 需要加密的内容2String MData2 = "0123456789abcdefgxyzwzyxgfedcba9876543210";String md5_1 = DigestUtils.md5Hex(JSON.toJSONString(MData1).getBytes("UTF-8")).toUpperCase();String md5_2 = DigestUtils.md5Hex(MData2.getBytes("UTF-8")).toUpperCase();System.out.println(md5_1);System.out.println(md5_2);}}
JavaScript
<script src="md5.js" type="text/javascript" charset="utf-8"></script>
// c31c225ffb090c04fcff568cf895609d
let hash = md5("huageyuan"); //当然也可以嵌套使用
// a4b8d86ec2a55efdeebc2574947ae33f
let hash2 = md5(md5('huageyuan')); console.log(hash);
console.log(hash2);
插件也可以使用网上的,比如
<script src=".19.0/js/md5.js"></script>
这是blueimp-md5插件地址,可以自行选择其他版本。
/
JS相关插件
本文标签: RSA和MD5加密(Java和JavaScript)
版权声明:本文标题:RSA和MD5加密(Java和JavaScript) 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/p/1699468330a357033.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论