記一次 實現 license授權


package com.example.demo;


import com.alibaba.fastjson.JSON;
import com.google.common.collect.ImmutableMap;

import javax.crypto.Cipher;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.security.Key;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.util.Map;

/**
* @author yangxj
* @date 2020-04-10 14:17
*/
public class RSADemo {
/**
* 生成一對公(私)鑰
* @throws Exception
*/
public static void genPairKey() throws Exception {
//實例化Key
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
//獲取一對鑰匙
KeyPair keyPair = keyPairGenerator.generateKeyPair();
//獲得公鑰
Key publicKey = keyPair.getPublic();
//獲得私鑰
Key privateKey = keyPair.getPrivate();

// 公(私)鑰寫入 文件
FileOutputStream publicFos = new FileOutputStream("/Users/edz/licensedir/public.key");
FileOutputStream privateFos = new FileOutputStream("/Users/edz/licensedir/private.key");

ObjectOutputStream outputStream = new ObjectOutputStream(publicFos);

ObjectOutputStream outputStream2 = new ObjectOutputStream(privateFos);

outputStream.writeObject(publicKey);

outputStream2.writeObject(privateKey);

outputStream2.close();
outputStream.close();
}

/**
* 解析
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
Cipher cipher = Cipher.getInstance("RSA");

// 反序列化 獲取 公(私)鑰
FileInputStream fis1 = new FileInputStream("/Users/edz/licensedir/public.key");
FileInputStream fis2 = new FileInputStream("/Users/edz/licensedir/private.key");

ObjectInputStream objectStream1 = new ObjectInputStream(fis1);
ObjectInputStream objectStream2 = new ObjectInputStream(fis2);

Key publicKey = (Key)objectStream1.readObject();
Key privateKey = (Key)objectStream2.readObject();

objectStream1.close();
objectStream2.close();

// 要加密的內容
Map authInfo = ImmutableMap.of("授權", "某人", "授權有效期至", "2019-12-01");

//用公(私)鑰加密
cipher.init(Cipher.ENCRYPT_MODE, privateKey);
byte [] encodeResult = cipher.doFinal(JSON.toJSONBytes(authInfo));

//用私(公)鑰匙解密
cipher.init(Cipher.DECRYPT_MODE, publicKey);
byte[] bytes = cipher.doFinal(encodeResult);

System.out.println(new String(bytes));


}
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM