本帖最后由 轻光233 于 2019-6-6 10:33 编辑
最近在做远程管理的插件,其中牵扯到加密的技术
由于个人只是个初中生,并没有了解过什么加密算法
请问吧里有什么dalao知道双向加密的算法,务必教教我这个萌新qwq
(已解决,感谢3l和6l的dalao,之前我说base64是加密算法的说法也是极其错误的,在此道歉,也感谢7l的dalao的提醒)
最近在做远程管理的插件,其中牵扯到加密的技术
由于个人只是个初中生,并没有了解过什么加密算法
请问吧里有什么dalao知道双向加密的算法,务必教教我这个萌新qwq
(已解决,感谢3l和6l的dalao,之前我说base64是加密算法的说法也是极其错误的,在此道歉,也感谢7l的dalao的提醒)
RSA/AES算法,非常常见
本帖最后由 roj234 于 2019-5-12 17:27 编辑
复制代码
- import java.io.UnsupportedEncodingException;
- import java.security.InvalidKeyException;
- import java.security.NoSuchAlgorithmException;
- import java.security.SecureRandom;
- import javax.crypto.BadPaddingException;
- import javax.crypto.Cipher;
- import javax.crypto.IllegalBlockSizeException;
- import javax.crypto.KeyGenerator;
- import javax.crypto.NoSuchPaddingException;
- import javax.crypto.SecretKey;
- import javax.crypto.spec.SecretKeySpec;
-
- /**
- **
- * AES128 算法,加密模式为ECB,填充模式为 pkcs7(实际就是pkcs5)
- *
- *
- */
- public class AESUtil {
-
- /**
- * 加密
- *
- * @param content 需要加密的内容
- * @param key 加密密码
- * @return
- */
- public static byte[] encrypt(String content, String key) {
- try {
- KeyGenerator kgen = KeyGenerator.getInstance("AES");
- SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
- random.setSeed(key.getBytes());
- kgen.init(128, random);
- SecretKey secretKey = kgen.generateKey();
- byte[] enCodeFormat = secretKey.getEncoded();
- SecretKeySpec secretKeySpec = new SecretKeySpec(enCodeFormat, "AES");
- Cipher cipher = Cipher.getInstance("AES");// 创建密码器
- byte[] byteContent = content.getBytes("UTF-8");
- cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);// 初始化
- byte[] result = cipher.doFinal(byteContent);
- return result; // 加密
- } catch (NoSuchAlgorithmException e) {
- e.printStackTrace();
- } catch (NoSuchPaddingException e) {
- e.printStackTrace();
- } catch (InvalidKeyException e) {
- e.printStackTrace();
- } catch (UnsupportedEncodingException e) {
- e.printStackTrace();
- } catch (IllegalBlockSizeException e) {
- e.printStackTrace();
- } catch (BadPaddingException e) {
- e.printStackTrace();
- }
- return null;
- }
-
- /**解密
- * @param content 待解密内容
- * @param key 解密密钥
- * @return
- */
- public static byte[] decrypt(byte[] content, String key) {
- try {
- KeyGenerator kgen = KeyGenerator.getInstance("AES");
- SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
- random.setSeed(key.getBytes());
- kgen.init(128, random);
- SecretKey secretKey = kgen.generateKey();
- byte[] enCodeFormat = secretKey.getEncoded();
- SecretKeySpec secretKeySpec = new SecretKeySpec(enCodeFormat, "AES");
- Cipher cipher = Cipher.getInstance("AES");// 创建密码器
- cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);// 初始化
- byte[] result = cipher.doFinal(content);
- return result; // 加密
- }catch (NoSuchAlgorithmException e) {
- //e.printStackTrace();
- } catch (NoSuchPaddingException e) {
- //e.printStackTrace();
- } catch (InvalidKeyException e) {
- //e.printStackTrace();
- } catch (IllegalBlockSizeException e) {
- //e.printStackTrace();
- } catch (BadPaddingException e) {
- //e.printStackTrace();
- }
- return null;
- }
-
- /**
- * 字符串加密
- * @param content 要加密的字符串
- * @param key 加密的AES Key
- * @return
- */
- public static String encryptString(String content, String key) {
- return parseByte2HexStr( encrypt(content, key));
- }
-
- /**
- * 字符串解密
- * @param content 要解密的字符串
- * @param key 解密的AES Key
- * @return
- */
- public static String decryptString(String content, String key){
- byte[] decryptFrom = parseHexStr2Byte(content);
- byte[] decryptResult = decrypt(decryptFrom,key);
- return new String(decryptResult);
- }
-
-
- /**将16进制转换为二进制
- * @param hexStr
- * @return
- */
- public static byte[] parseHexStr2Byte(String hexStr) {
- if (hexStr.length() < 1)
- return null;
- byte[] result = new byte[hexStr.length()/2];
- for (int i = 0;i< hexStr.length()/2; i++) {
- int high = Integer.parseInt(hexStr.substring(i*2, i*2+1), 16);
- int low = Integer.parseInt(hexStr.substring(i*2+1, i*2+2), 16);
- result[i] = (byte) (high * 16 + low);
- }
- return result;
- }
-
-
- /**将二进制转换成16进制
- * @param buf
- * @return
- */
- public static String parseByte2HexStr(byte buf[]) {
- StringBuffer sb = new StringBuffer();
- for (int i = 0; i < buf.length; i++) {
- String hex = Integer.toHexString(buf[i] & 0xFF);
- if (hex.length() == 1) {
- hex = '0' + hex;
- }
- sb.append(hex.toUpperCase());
- }
- return sb.toString();
- }
- }</i></i>
本帖最后由 tian_wc 于 2019-5-12 18:32 编辑

具体怎么用建议百度,node和java都有现成的包可以用
非对称、双向,很符合你的要求

具体怎么用建议百度,node和java都有现成的包可以用
非对称、双向,很符合你的要求
建议先了解一下不对称加密
https://www.zhihu.com/question/33645891
https://www.zhihu.com/question/33645891
本帖最后由 lona 于 2019-5-13 16:09 编辑
1.这里不是贴吧2.你需要使用的是AES+RSA
3.AES-对称加密(速度较快
4.RSA-非对称加密(速度较慢
5.AES的实现在openssl,mbedtls等广泛使用的库均有实现,同时现在的部分CPU也支持AES
mbedtls
aes指令集
6.RSA的实现同样在openssl和mbedtls中有实现,但是没有CPU支持
openssl
7.如果你是期待的java示例代码,那就更简单了
rsa
aes
1.这里不是贴吧2.你需要使用的是AES+RSA
3.AES-对称加密(速度较快
4.RSA-非对称加密(速度较慢
5.AES的实现在openssl,mbedtls等广泛使用的库均有实现,同时现在的部分CPU也支持AES
mbedtls
aes指令集
6.RSA的实现同样在openssl和mbedtls中有实现,但是没有CPU支持
openssl
7.如果你是期待的java示例代码,那就更简单了
rsa
aes
楼上各位大佬已经介绍的很详细了。但是看了楼主的帖子,我还是忍不住想补充一点:
BASE64不是加密算法!不是加密算法!它不是!!!
加密算法的要求是需要通过一个特殊的密钥来解密,才能获取到原来的内容,
但是,根据英文维基百科的介绍,base64只是一种数据编码算法,它能做到的,就是把一串数据用另外一种方式6KGo6L6+5Ye65p2l而已,任何人只要知道是这种算法处理过的数据,就可以直接得到原来的数据。
“base64是加密算法”是极具误导性的错误说法。
相关链接:
https://en.m.wikipedia.org/wiki/Base64
https://stackoverflow.com/questi ... -encoding-algorithm
BASE64不是加密算法!不是加密算法!它不是!!!
加密算法的要求是需要通过一个特殊的密钥来解密,才能获取到原来的内容,
但是,根据英文维基百科的介绍,base64只是一种数据编码算法,它能做到的,就是把一串数据用另外一种方式6KGo6L6+5Ye65p2l而已,任何人只要知道是这种算法处理过的数据,就可以直接得到原来的数据。
“base64是加密算法”是极具误导性的错误说法。
相关链接:
https://en.m.wikipedia.org/wiki/Base64
https://stackoverflow.com/questi ... -encoding-algorithm