CDKEY生成器

CDKEY  生成器  


无聊 写着好玩的.

package randomString;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Main {

	/**
	 * 生成随机字符串
	 */
	private JFrame jFrame;
	private JPanel jp;
	private JButton jb;
	private JTextField tf,tf2;
	private JLabel	jl;
	public Main(){
		jFrame = new JFrame("字符串生成工具  by:smile");
		jp = new JPanel();
		jb = new JButton("生成(s)");
		tf = new JTextField(20);
		tf2 = new JTextField(3);
		jl = new JLabel("位");
		MyActionListener mal = new MyActionListener();

		jp.add(tf);
		jp.add(jb);
		jp.add(tf2);
		jp.add(jl);
		jFrame.add(jp);

		jb.setMnemonic('s');
		jb.addActionListener(mal);
		
		jFrame.pack();
		int w = jFrame.getToolkit().getScreenSize().width;//宽度
		int h = jFrame.getToolkit().getScreenSize().height;//高度
		jFrame.setLocation(w/2-200,h/2-30);
		jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		jFrame.setVisible(true);
	}
	class MyActionListener implements ActionListener{
		@Override
		public void actionPerformed(ActionEvent e) {
			if(e.getSource().equals(jb)){
				try {
					tf.setText(Main.getRandomString(Integer.parseInt(tf2.getText())));
				} catch (Exception x) {
					JOptionPane.showMessageDialog(null, "请输入数字");
				}
			}
		}
	}
	public static String getRandomString(int length) { //length表示生成字符串的长度
		String base = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";   
		Random random = new Random();   
		StringBuffer sb = new StringBuffer();   
		for (int i = 0; i < length; i++) {   
			int number = random.nextInt(base.length());   
			sb.append(base.charAt(number));   
		}   
		return sb.toString();
	}  
	public static void main(String[] args) {
		new Main();
	}
}




  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
public synchronized String nextId() { long timestamp = timeGen(); //获取当前毫秒数 //如果服务器时间有问题(时钟后退) 报错。 if (timestamp < lastTimestamp) { throw new RuntimeException(String.format( "Clock moved backwards. Refusing to generate id for %d milliseconds", lastTimestamp - timestamp)); } //如果上次生成时间和当前时间相同,在同一毫秒内 if (lastTimestamp == timestamp) { //sequence自增,因为sequence只有12bit,所以和sequenceMask相与一下,去掉高位 sequence = (sequence + 1) & sequenceMask; //判断是否溢出,也就是每毫秒内超过4095,当为4096时,与sequenceMask相与,sequence就等于0 if (sequence == 0) { timestamp = tilNextMillis(lastTimestamp); //自旋等待到下一毫秒 } } else { sequence = 0L; //如果和上次生成时间不同,重置sequence,就是下一毫秒开始,sequence计数重新从0开始累加 } lastTimestamp = timestamp; long suffix = (datacenterId << datacenterIdShift) | (workerId << workerIdShift) | sequence; String datePrefix = DateFormatUtils.format(timestamp, "yyyyMMddHHMMssSSS"); return datePrefix + suffix; } protected long tilNextMillis(long lastTimestamp) { long timestamp = timeGen(); while (timestamp <= lastTimestamp) { timestamp = timeGen(); } return timestamp; } protected long timeGen() { return System.currentTimeMillis(); } private byte getLastIP(){ byte lastip = 0; try{ InetAddress ip = InetAddress.getLocalHost(); byte[] ipByte = ip.getAddress(); lastip = ipByte[ipByte.length - 1]; } catch (UnknownHostException e) { e.printStackTrace(); } return lastip; }
### 回答1: 这是一段使用 Java 语言实现从文本读取 SM2 公钥,生成 PublicKey 对象的代码示例: ``` import java.security.KeyFactory; import java.security.NoSuchAlgorithmException; import java.security.spec.InvalidKeySpecException; import java.security.spec.X509EncodedKeySpec; import java.util.Base64; public class SM2PublicKeyExample { public static void main(String[] args) throws NoSuchAlgorithmException, InvalidKeySpecException { // 读取 SM2 公钥文本 String sm2PublicKeyText = "MFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEXAMPLEPUBLICKEY=="; // 将 SM2 公钥文本进行 Base64 解码 byte[] sm2PublicKeyBytes = Base64.getDecoder().decode(sm2PublicKeyText); // 创建 X509EncodedKeySpec 对象 X509EncodedKeySpec keySpec = new X509EncodedKeySpec(sm2PublicKeyBytes); // 获取 KeyFactory 对象 KeyFactory keyFactory = KeyFactory.getInstance("SM2"); // 生成 PublicKey 对象 java.security.PublicKey publicKey = keyFactory.generatePublic(keySpec); } } ``` 在上面的代码中,首先读取了 SM2 公钥的文本。然后使用 Base64 解码器将 SM2 公钥文本解码为字节数组。接着创建了 X509EncodedKeySpec 对象,该对象是用来封装 SM2 公钥的字节数组的。接下来,通过调用 KeyFactory 类的 getInstance() 方法来获取 KeyFactory 对象,并使用 generatePublic() 方法将 X509EncodedKeySpec 对象转换为 PublicKey 对象。 ### 回答2: 可以使用Java的IO流来从文本文件中读取SM2公钥,并生成PublicKey对象。 以下是一段示例代码: ```java import java.io.BufferedReader; import java.io.FileReader; import java.security.KeyFactory; import java.security.PublicKey; import java.security.spec.X509EncodedKeySpec; public class ReadSM2PublicKey { public static void main(String[] args) { try { // 读取公钥文件 BufferedReader br = new BufferedReader(new FileReader("public_key.txt")); String publicKeyStr = br.readLine(); br.close(); // 将公钥字符串转换为字节数组 byte[] publicKeyBytes = hexStringToByteArray(publicKeyStr); // 创建X509EncodedKeySpec对象 X509EncodedKeySpec keySpec = new X509EncodedKeySpec(publicKeyBytes); // 使用SM2算法生成PublicKey对象 KeyFactory keyFactory = KeyFactory.getInstance("SM2"); PublicKey publicKey = keyFactory.generatePublic(keySpec); // 打印生成的PublicKey对象 System.out.println("生成的PublicKey对象:" + publicKey); } catch (Exception e) { e.printStackTrace(); } } // 将字符串表示的十六进制数转换为字节数组 public static byte[] hexStringToByteArray(String s) { int len = s.length(); byte[] data = new byte[len / 2]; for (int i = 0; i < len; i += 2) { data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4) + Character.digit(s.charAt(i + 1), 16)); } return data; } } ``` 在上述代码中,我们首先创建一个BufferedReader对象,用于从文件中读取公钥字符串。然后,我们将读取到的字符串转换为字节数组,并使用X509EncodedKeySpec对象将其包装起来。最后,通过KeyFactory的generatePublic方法,我们使用SM2算法生成了PublicKey对象。最后,我们打印出生成的PublicKey对象。 请注意,在代码中的`public_key.txt`是公钥存储在文本文件中的路径。你需要将其替换为你实际使用的公钥文件路径。 ### 回答3: 以下是一个用于从文本读取SM2公钥并生成PublicKey对象的Java代码示例: ```java import java.io.BufferedReader; import java.io.FileReader; import java.security.KeyFactory; import java.security.PublicKey; import java.security.spec.X509EncodedKeySpec; public class PublicKeyReader { public static PublicKey readPublicKey(String filePath) throws Exception { FileReader fileReader = new FileReader(filePath); BufferedReader bufferedReader = new BufferedReader(fileReader); // 从文本中读取SM2公钥的字节数组表示 StringBuilder publicKeyBuilder = new StringBuilder(); String line; while ((line = bufferedReader.readLine()) != null) { publicKeyBuilder.append(line); } bufferedReader.close(); // 解码公钥字节数组并生成PublicKey对象 byte[] publicKeyBytes = hexStringToByteArray(publicKeyBuilder.toString()); KeyFactory keyFactory = KeyFactory.getInstance("SM2"); X509EncodedKeySpec publicKeySpec = new X509EncodedKeySpec(publicKeyBytes); return keyFactory.generatePublic(publicKeySpec); } private static byte[] hexStringToByteArray(String hexString) { int len = hexString.length(); byte[] data = new byte[len / 2]; for (int i = 0; i < len; i += 2) { data[i / 2] = (byte) ((Character.digit(hexString.charAt(i), 16) << 4) + Character.digit(hexString.charAt(i+1), 16)); } return data; } public static void main(String[] args) { try { // 读取文本文件,并生成PublicKey对象 PublicKey publicKey = readPublicKey("publicKey.txt"); // 使用PublicKey对象执行其他操作... System.out.println("成功生成PublicKey对象"); } catch (Exception e) { e.printStackTrace(); } } } ``` 请将SM2公钥保存在名为"publicKey.txt"的文本文件中,每行可以包含一个或多个十六进制字符,示例: ``` 30820120300d06092a864886f70d01010105000382010d00308201080282010100bec4337034b6d9690aa3c9024ffa4988d3c6c8bef7f1a3037ec3bcd4986b982a2268e02e5f59d1cd1e366de1d5869bdec58db50b83a0dafd8e3d8aabbf113143f5de40fe0468dc3050216ecd67df112bb3f430c447d3dfea89814e80f5212484dd4fcf4a04be191e987d49b352d0332322e03fd4f3e6f01db3bfb4d079271cc79b15f8d298516b65832c940c1bdbf8a40b21aa5e9530fbcded5694af8b063612bc320778bffdb0f7efd03469c693a72df29847c7c9e8a0637b33a3b1e50c79952d5ed51bb81ce33eafcb5c0786368f6637e60e209d96e31614f31b583694c496ef35cd2a722c995bb21f324e059d0e2e0e990457d182997d4e1c836a5ef7e18ad44bc7975ce29ecc1d49502c567f0c3301dbcd3e52d ``` 以上代码的`readPublicKey`方法接收一个文件路径作为参数,并从该文件中读取SM2公钥。读取的公钥是以十六进制字符表示的字节数组。然后,该方法使用SM2算法将公钥字节数组转换为`X509EncodedKeySpec`对象,并通过`KeyFactory`生成`PublicKey`对象。在示例代码中,我们在`main`方法中调用`readPublicKey`方法,并使用返回的`PublicKey`对象执行其他操作。最后,代码输出"成功生成PublicKey对象"以表示成功执行。请根据实际需求调整代码中的文件路径和其他部分。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值