惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

N
News | PayPal Newsroom
Security Archives - TechRepublic
Security Archives - TechRepublic
Hacker News: Ask HN
Hacker News: Ask HN
H
Hacker News: Front Page
Apple Machine Learning Research
Apple Machine Learning Research
TaoSecurity Blog
TaoSecurity Blog
Help Net Security
Help Net Security
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
V
V2EX
Hugging Face - Blog
Hugging Face - Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
人人都是产品经理
人人都是产品经理
博客园 - 三生石上(FineUI控件)
Security Latest
Security Latest
Cloudbric
Cloudbric
WordPress大学
WordPress大学
S
SegmentFault 最新的问题
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Know Your Adversary
Know Your Adversary
A
Arctic Wolf
L
LangChain Blog
Application and Cybersecurity Blog
Application and Cybersecurity Blog
The GitHub Blog
The GitHub Blog
P
Proofpoint News Feed
W
WeLiveSecurity
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
M
MIT News - Artificial intelligence
Google DeepMind News
Google DeepMind News
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
The Cloudflare Blog
小众软件
小众软件
NISL@THU
NISL@THU
云风的 BLOG
云风的 BLOG
P
Privacy & Cybersecurity Law Blog
S
Security @ Cisco Blogs
博客园 - 【当耐特】
I
InfoQ
Vercel News
Vercel News
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
P
Proofpoint News Feed
O
OpenAI News
Google DeepMind News
Google DeepMind News
N
News and Events Feed by Topic
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
K
Kaspersky official blog
T
Threat Research - Cisco Blogs
量子位
宝玉的分享
宝玉的分享

浅枫沐雪

反思 - 浅枫沐雪 面向领域驱动设计 —— Domain Driver Design 微服务如何发布api包接口给第三方使用? - 浅枫沐雪 记知识库数据迁移 - 浅枫沐雪 四月是你的谎言 - 浅枫沐雪
idea授权备份 - 浅枫沐雪
作者: qfmx · 2025-05-15 · via 浅枫沐雪

main.py

import os
import base64
from datetime import datetime, timedelta
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.primitives.asymmetric import rsa
from cryptography import x509
from cryptography.x509.oid import NameOID
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric import padding
import pytz
# Generating Certificates
def gen_crt_key():
  backend = default_backend()

  key = rsa.generate_private_key(
      public_exponent=65537,
      key_size=4096,
      backend=backend
  )

  subject = issuer = x509.Name([
      x509.NameAttribute(NameOID.COMMON_NAME, u'JetProfile CA')
  ])

  cert = x509.CertificateBuilder().subject_name(
      subject
  ).issuer_name(
      issuer
  ).public_key(
      key.public_key()
  ).serial_number(
      x509.random_serial_number()
  ).not_valid_before(
      datetime.now(pytz.utc) - timedelta(days=1)
  ).not_valid_after(
      datetime.now(pytz.utc) + timedelta(days=3650)
  ).sign(key, hashes.SHA256(), backend)

  with open("ca.key", "wb") as key_file:
      key_file.write(key.private_bytes(
          encoding=serialization.Encoding.PEM,
          format=serialization.PrivateFormat.TraditionalOpenSSL,
          encryption_algorithm=serialization.NoEncryption()
      ))

  with open("ca.crt", "wb") as cert_file:
      cert_file.write(cert.public_bytes(serialization.Encoding.PEM))
# Load Root Certificate
def load_root_certificate():
  root_cert = "-----BEGIN CERTIFICATE-----\n" + \
          "MIIFOzCCAyOgAwIBAgIJANJssYOyg3nhMA0GCSqGSIb3DQEBCwUAMBgxFjAUBgNV\n" + \
          "BAMMDUpldFByb2ZpbGUgQ0EwHhcNMTUxMDAyMTEwMDU2WhcNNDUxMDI0MTEwMDU2\n" + \
          "WjAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBMIICIjANBgkqhkiG9w0BAQEFAAOC\n" + \
          "Ag8AMIICCgKCAgEA0tQuEA8784NabB1+T2XBhpB+2P1qjewHiSajAV8dfIeWJOYG\n" + \
          "y+ShXiuedj8rL8VCdU+yH7Ux/6IvTcT3nwM/E/3rjJIgLnbZNerFm15Eez+XpWBl\n" + \
          "m5fDBJhEGhPc89Y31GpTzW0vCLmhJ44XwvYPntWxYISUrqeR3zoUQrCEp1C6mXNX\n" + \
          "EpqIGIVbJ6JVa/YI+pwbfuP51o0ZtF2rzvgfPzKtkpYQ7m7KgA8g8ktRXyNrz8bo\n" + \
          "iwg7RRPeqs4uL/RK8d2KLpgLqcAB9WDpcEQzPWegbDrFO1F3z4UVNH6hrMfOLGVA\n" + \
          "xoiQhNFhZj6RumBXlPS0rmCOCkUkWrDr3l6Z3spUVgoeea+QdX682j6t7JnakaOw\n" + \
          "jzwY777SrZoi9mFFpLVhfb4haq4IWyKSHR3/0BlWXgcgI6w6LXm+V+ZgLVDON52F\n" + \
          "LcxnfftaBJz2yclEwBohq38rYEpb+28+JBvHJYqcZRaldHYLjjmb8XXvf2MyFeXr\n" + \
          "SopYkdzCvzmiEJAewrEbPUaTllogUQmnv7Rv9sZ9jfdJ/cEn8e7GSGjHIbnjV2ZM\n" + \
          "Q9vTpWjvsT/cqatbxzdBo/iEg5i9yohOC9aBfpIHPXFw+fEj7VLvktxZY6qThYXR\n" + \
          "Rus1WErPgxDzVpNp+4gXovAYOxsZak5oTV74ynv1aQ93HSndGkKUE/qA/JECAwEA\n" + \
          "AaOBhzCBhDAdBgNVHQ4EFgQUo562SGdCEjZBvW3gubSgUouX8bMwSAYDVR0jBEEw\n" + \
          "P4AUo562SGdCEjZBvW3gubSgUouX8bOhHKQaMBgxFjAUBgNVBAMMDUpldFByb2Zp\n" + \
          "bGUgQ0GCCQDSbLGDsoN54TAMBgNVHRMEBTADAQH/MAsGA1UdDwQEAwIBBjANBgkq\n" + \
          "hkiG9w0BAQsFAAOCAgEAjrPAZ4xC7sNiSSqh69s3KJD3Ti4etaxcrSnD7r9rJYpK\n" + \
          "BMviCKZRKFbLv+iaF5JK5QWuWdlgA37ol7mLeoF7aIA9b60Ag2OpgRICRG79QY7o\n" + \
          "uLviF/yRMqm6yno7NYkGLd61e5Huu+BfT459MWG9RVkG/DY0sGfkyTHJS5xrjBV6\n" + \
          "hjLG0lf3orwqOlqSNRmhvn9sMzwAP3ILLM5VJC5jNF1zAk0jrqKz64vuA8PLJZlL\n" + \
          "S9TZJIYwdesCGfnN2AETvzf3qxLcGTF038zKOHUMnjZuFW1ba/12fDK5GJ4i5y+n\n" + \
          "fDWVZVUDYOPUixEZ1cwzmf9Tx3hR8tRjMWQmHixcNC8XEkVfztID5XeHtDeQ+uPk\n" + \
          "X+jTDXbRb+77BP6n41briXhm57AwUI3TqqJFvoiFyx5JvVWG3ZqlVaeU/U9e0gxn\n" + \
          "8qyR+ZA3BGbtUSDDs8LDnE67URzK+L+q0F2BC758lSPNB2qsJeQ63bYyzf0du3wB\n" + \
          "/gb2+xJijAvscU3KgNpkxfGklvJD/oDUIqZQAnNcHe7QEf8iG2WqaMJIyXZlW3me\n" + \
          "0rn+cgvxHPt6N4EBh5GgNZR4l0eaFEV+fxVsydOQYo1RIyFMXtafFBqQl6DDxujl\n" + \
          "FeU3FZ+Bcp12t7dlM4E0/sS1XdL47CfGVj4Bp+/VbF862HmkAbd7shs7sDQkHbU=\n" + \
          "-----END CERTIFICATE-----\n"

  return x509.load_pem_x509_certificate(root_cert.encode(), default_backend())

def main():
  try:
      # Check if CA key exists, if not generate it
      if not os.path.exists("ca.key"):
          gen_crt_key()

      with open("./ca.crt", "rb") as cert_file:
          cert_data = cert_file.read()
          cert = x509.load_pem_x509_certificate(cert_data, default_backend())

      # x: Certificate signature
      x = int.from_bytes(cert.signature, byteorder="big")

      # y: Certificate exponent (fixed to 65537)
      y = 65537

      # Load root certificate
      root_cert = load_root_certificate()
      root_public_key = root_cert.public_key()
      z = root_public_key.public_numbers().n

      # r: Fake result
      cert_public_key = cert.public_key()
      cert_public_numbers = cert_public_key.public_numbers()
      r = pow(x, cert_public_numbers.e, cert_public_numbers.n)
      print()
      print(f"EQUAL,{x},{y},{z}->{r}")
  except Exception as e:
      print(e)

class LicensePart:
  def __init__(self, license_id, codes, date):
      self.licenseId = license_id
      self.licenseeName = license_id
      self.assigneeName = license_id
      self.products = [self.Product(code, date) for code in codes]

  def __str__(self):
      products_str = ",".join(map(str, self.products))
      return "{" + \
          f"\"licenseId\":\"{self.licenseId}\"," + \
          f"\"licenseeName\":\"{self.licenseeName}\"," + \
          f"\"assigneeName\":\"{self.assigneeName}\"," + \
          "\"licenseRestriction\":\"\"," + \
          "\"checkConcurrentUse\":false," + \
          f"\"products\":[{products_str}]," + \
          "\"metadata\":\"0120230914PSAX000005\"," + \
          "\"hash\":\"TRIAL:-1920204289\"," + \
          "\"gracePeriodDays\":7," + \
          "\"isAutoProlongated\":true" + \
          "}"

  class Product:
      def __init__(self, code, date):
          self.code = code
          self.fallbackDate = date
          self.paidUpTo = date

      def __str__(self):
          return "{" + \
              f"\"code\":\"{self.code}\"," + \
              f"\"fallbackDate\":\"{self.fallbackDate}\"," + \
              f"\"paidUpTo\":\"{self.paidUpTo}\"," + \
              "\"extended\":true" + \
              "}"

def generator(codes,license_date,license_id):
  try:
      with open("ca.key", "rb") as f:
          pem_data = f.read()
      private_key = serialization.load_pem_private_key(pem_data, password=None, backend=default_backend())

      with open("ca.crt", "rb") as f:
          cert_data = f.read()
      cert = x509.load_pem_x509_certificate(cert_data, default_backend())

      # Customize license content
      license_part = LicensePart(license_id, codes, license_date)
      license_part_bytes = str(license_part).encode("utf-8")
      license_part_base64 = base64.b64encode(license_part_bytes).decode("utf-8")
      signature = private_key.sign(
          license_part_bytes,
          padding.PKCS1v15(),
          hashes.SHA1()
      )
      signature_base64 = base64.b64encode(signature).decode("utf-8")

      # Combine results as needed
      result = f"{license_id}-{license_part_base64}-{signature_base64}-{base64.b64encode(cert_data).decode('utf-8')}"
      print(result)
  except Exception as e:
      print(e)


if __name__ == "__main__":
  main()
  # IDEA code
  codes = ["II","PSI","PCWMP"]
  # ALl code
  all_codes = [
      "II", "PS", "AC", "DB", "RM", "WS", "RD", "CL", "PC", "GO", "DS", "DC", "DPN", "DM",
      "PSYMFONYPLUGIN", "PWLANG", "PSWPLUGIN", "PGITTOOLBOX", "PHYBRISCOMMERCE", "PMATERIALUI",
      "PSEQUENCEDIAGRA", "PJETFORCER", "PAEMIDE", "PRNCONSOLE", "PANSIHIGHLIGHT", "PYAOQIANGBPMN",
      "PAEM", "PRAINBOWBRACKET", "PGITSCOPE", "PVLOG", "PCODEMRBASE", "PJDCLEANREAD", "PBRWJV",
      "PDB", "PEXTRAICONS", "PBISJ", "PSCIPIO", "PBISAA", "PZENUML", "PJFORMDESIGNER", "PORCHIDE",
      "PIEDIS", "PCMAKEPLUS", "POPENAPI", "PBETTERHIGHLIGH", "PATOMONEDARK", "PGDOC", "POFFICEFLOOR",
      "PWIFIADB", "PLARAVEL", "PODOO", "PCREVIEW", "PMRINTEGEE", "PSFCC", "PMINBATIS", "PPOJOTOJSONSCH",
      "PRDFANDSPARQL", "PBASHSUPPORTPRO", "PMYBATISLOG", "PSMARTJUMP", "PJAVACODESUGG", "PGOLANGCODESUGG",
      "PRUBYCODESUGG", "PVCS", "PJSCODESUGG", "PPHPCODESUGG", "PSVERILOG", "PSPARQL", "PTOOLSET", "PJSONTOTS",
      "PQMLEDITOR", "PSTRKER", "PELASTICSEARCH", "PVISUALGC", "PPYCODESUGG", "PFLUTTER", "PRESTKIT",
      "PAWSLAMBDADEPLR", "PPUMLSTUDIO", "PCWMP", "PFIREHIGHLIGHT", "PJPASQL", "PGODRUNNER", "PLEDGER",
      "PREGEXTOOL", "PAPH", "PGITLABCI", "PCIRCLECI", "PHEROKU", "PREDISMANAGER", "PZEROCODE", "PSTORMSECTIONS",
      "PSENTRYINTEG", "PREDISTOOLS", "PFUZYFIPC", "PBITRISECI", "PQTSQSSEDITOR", "PAPPLETRUNNER", "PDATABASE",
      "PHPEAPLUGIN", "PLEP", "PHPBUILDER", "PMATERIALHC", "PCDMQTTCLIENT", "PISCRATCH", "PRSMGNL", "PCAPELASTIC",
      "PASTOCK", "PCAPREDIS", "PBEANCONVERTER", "PELSA", "PDJANGOTPLPEP", "PQUERYFLAG", "PNGINX", "PKSEXPLORER",
      "PZKA", "PCDAPIRUNNER", "PNEONPRO", "PMBCODEHELPPRO", "PCODEREFACTORAI", "PXSDVISUALIZER", "PSPRINGBOOTIDEA",
      "PEXCELEDITOR", "PGITLAB", "PYAPIQUICKTYPE", "PTERMINAL", "PWIREMOCHA", "PDYNAMODB", "PFASTSHELL",
      "PJSONNETEMLSUP",
      "PPHPHOUDINI", "POXYXSDJSONSCH", "PQUARKUSHELPER", "PWGCODECREATOR", "PCIINTG", "PDBDATABASETOOL", "PNGROK",
      "PKARATE", "PMATERIALEXTRAS", "PJSONTOANYLANGU", "PMATERIALCUSTOM", "PMATERIALLANG", "PMATERIALFRAME",
      "PRANCHER",
      "PREDISCLIHELPER", "PSCREENCODEPRO", "PCODEKITS", "PREDISS", "PAWSQLADVISOR", "PLATTEPRO", "PGERRYTHEMESPRO",
      "PUNIAPPSUPPORT", "POPENAPICRUDWIZ", "PGOPARSER", "PNEXTSKETCH", "PNETLIFY", "PGERRYCYBERPUNK", "PTLDRAI",
      "PBREWBUNDLE",
      "PGERRYSPACE", "PKAFKAIDE", "PGITHUBCI", "PGERRYNATURE", "PEXTENSION", "PSKOL", "PGERRYCHERRY", "PGERRYCOFFEE",
      "PCONNECTUI", "POXYJSONCONVERT", "PDOYTOWIN", "PGERRYAURORA", "PWXUFQYRHZCRSEO", "PWAUFKYVHQCRXEO",
      "PSQLFLUFFLINTER",
      "PMAGE", "PTAILWINDTOOLS", "PTRAVISCI", "PMONGOEXPERT", "PNEXTSKETCHTWO", "PWXUQQYVOXCRSEO", "PBUILDMON",
      "PJETCLIENT",
      "PAICODING", "PCAICOMMITAPP", "PCHATGPTCODING", "POLYBPMNGDNEXT", "PARMADILLO", "PVERILOGLANGUAG",
      "PNOSQLNAVMDB",
      "PCUEFY", "PCOMPOSEHAMMER", "PGPTASSISTANT", "PDTOBUDDY", "PNPMPACKAGEJSON", "PAZURECODING", "PGITLABCICD",
      "PSENTRY",
      "PKAFKA", "PSRCODEGEN", "PSOURCESYNCPRO", "PAZD", "PWXUQRYTOXCRSEO", "PPOLARISTOMCATS", "PMYBATISFIELDAD",
      "PIMAGETOVECTOR",
      "PDATAGRAPH", "POXYJSONSCHGEN", "PSPEECHTOTEXT", "PMYSQLPROXY", "PFASTREQUEST", "PMYBATISHELPER", "PREDIS"
  ]
  # license date
  license_date = "9999-12-31"
  # license id
  license_id = "qfmx"
  generator(all_codes, license_date, license_id)