编码能效插件SmartInputPro插件扩展

前言

今天是分享一个能效工具,这个是用的有一段时间了,觉得不错。今天试用期到了,然后又不想花钱买这个插件。


一、能效插件

没有扩展之前,这里是有个复制系统信息的按钮的哦,后面要用。

就是这个插件的永久激活,这个插件是干嘛的呢?解救编码与注释的输入法切换的。具体可以看插件介绍

二、扩展方法

1.python环境

因为扩展方法是要用到python的,所以需要各位自行安装python环境

2.扩展脚本

不要问我脚本哪里来的,我也只能跟你说别网上好人送的。

python 复制代码
import base64
import random
import string
import time

from Crypto.Cipher import AES
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric import padding
from cryptography.hazmat.primitives.asymmetric import rsa
from cryptography.hazmat.primitives.serialization import (
    Encoding,
    PrivateFormat,
    PublicFormat,
    NoEncryption, load_pem_private_key, load_pem_public_key
)

smart_input_public_key_pem = """-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0+LewWdwP5+D7izKjBZ2
SZiwcbJroRayDLLuOu+LUJcjewYyRUIi3APfPwwQROEYBNFbqoNeWS3ltCmHypoD
C/kEzxFd+9DQqAl7eoJsWHZ9cZKZetICLttUTUZhYJpJXHfaVdvWu9JX4SuuDB4k
+vzrQOwC1qXydo89CF5zIcIuPniH4GXFJlWbLJztwsDZuHMd/5B56nhC3RXpIF6X
ftqHEKml3LnD+dzvuVCMKwIQGv9BHRCuifBQMOIenvve3XtPwxeH83evyIIU/4fY
kriFIXg1nBtJxMaXoHnw9Y7KfaS1NWHmBSLM5PfcN1Eh4PCgtQzL6RYY7bRjCau8
pQIDAQAB
-----END PUBLIC KEY-----"""

private_key_pem = """-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCyH7xJSGtG2y+t
kv1qU5ws8fEmQavV1I3LRDgTrToj7uefl6Xgzapj85eSZtuEg5ustMLYhBnPPeRv
iu+jHH70IX+95ODnBsiYdzlhNDocZHMAbqTTuEjS+4mej/1+ZUiAtN2ofKN6i/fV
bDVy7vDBXUZExHIocDLgY2poRsNC9Tu3j0m7M4GKE+g6trsHEQyi/IrHh+5UeXkS
7EjihzS0WCBcbY9CvZbU3VCkei7GU7a95MordY9RN4jrsS0kVLrIjHY/NSJWwksw
dkGYCLE0FQejamw84yJgOLmaE9PZD3iY2S1VtMnsfcsvtiB31k4AOUtHXWTBDmQZ
Y85Z1KKLAgMBAAECggEAQenbd3TMecpnQMBZdUyeSMV4+rKnfzeqBtNmOuXJ0303
CggIcoE4scb0ylC0n7tB0q2LQqrTkCxziVEs7zt+wSFaT29QSD1q4nyP56f3bwU+
xySqasxRan15Rgs7f1fEdhg3w/7nUdRUsA3cU30W6z70X0MgiVVHhmBTgmXZIL/X
ovQ0Bz7TKtZzDN+EpojgsAS2IV8Vz2Crof8q999yUbhiTmwIXcSnSN4LALmxDd+K
KmUPF+foAu3cII/ZiDlzclBHYOq3z2IDZCIT7cfgSuWVtXU14N8SGkpfVR8EHftW
6Q7MD4qjIfjjM5MHNFdQ64HF4awEre9bBlms06DgYQKBgQDd1G/MYoZSVsnCSNql
PUexOdgu2qw79L9MYlMswPq7AG5lncQ8lMzlBYHs5WmHblOMyJIZFxyHK9a2sPJP
EVgiFqLY3vrZ7J2Q1q8WwjLCVGYjmpmRn+4CZ+GY+vaqNma4FzQ8bIUEcdZjGY1+
e/GGd3WVjOQ70q73nYvCQ6/IIQKBgQDNj9D9YZkQwqEFOQ89TeJ3sl14lCih8vlI
pqq9JbVuS5MrarNHkOfVC71JrOQJHPm6xapVW70DqVMr8N0xqq69ECOElpXDs/Ks
bPwsgoo6yOImWjQtc2orrZ6fS0+g6zNoJJBsk6IN+3AAV5UqxqCsoPT4icjZXDKP
nLPq0jllKwKBgQC8+hhP/vM9PBBfgh86O81Sjtu7drDZ1vQNR4piCvjOzFxAFzow
/fbbeGip/vp61KM6wTetRkIYaWFee7nBYB471BrhNHxxoKDO3gWFFuWVJb9pv2/q
XluuEv9eixYOBZBWbfYjL7PWCIDCJeejhEVK74PtZnyc9iv2aHHCilU64QKBgArG
+4INV+UVDzQi5bWlG7aC13u26Np0zrUMZ+86xuRdef3Qvk2GP2FgGDCArAP+TOmJ
64BGKwbCHeYz3qT3+elXq0UMUBXOnW6E2EPNJEoothKksA+h+XMIy0Q2wpoBOtS+
9gN7SgfJovmhneR8PXhPiAhv0OP0fYIiCRzKoM+5AoGBAMsurWbhAwdTfyZyqLGN
CtHNHF5YgfDt7IM0vwzhXF9NEdTJfWmfRA2vpnegF3Lkouwi6aevbEti8+H/lRUL
BLvn2Be7sOyZPIeuHaLVl3wi7XpqclLxkOyw5RJzsx0lKq/1q9s/WCv44ZCvIKU1
Vak4GZ72VMlpXY791VtJC7gs
-----END PRIVATE KEY-----"""

public_key_pem = """-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsh+8SUhrRtsvrZL9alOc
LPHxJkGr1dSNy0Q4E606I+7nn5el4M2qY/OXkmbbhIObrLTC2IQZzz3kb4rvoxx+
9CF/veTg5wbImHc5YTQ6HGRzAG6k07hI0vuJno/9fmVIgLTdqHyjeov31Ww1cu7w
wV1GRMRyKHAy4GNqaEbDQvU7t49JuzOBihPoOra7BxEMovyKx4fuVHl5EuxI4oc0
tFggXG2PQr2W1N1QpHouxlO2veTKK3WPUTeI67EtJFS6yIx2PzUiVsJLMHZBmAix
NBUHo2psPOMiYDi5mhPT2Q94mNktVbTJ7H3LL7Ygd9ZOADlLR11kwQ5kGWPOWdSi
iwIDAQAB
-----END PUBLIC KEY-----"""


def gen_keypair():
    # 生成私钥
    private_key = rsa.generate_private_key(
        public_exponent=65537,
        key_size=2048,
    )
    # 从私钥导出公钥
    public_key = private_key.public_key()
    # 将私钥保存到文件
    pem = private_key.private_bytes(
        encoding=Encoding.PEM,
        format=PrivateFormat.PKCS8,
        encryption_algorithm=NoEncryption()
    )
    # with open('private_key.pem', 'wb') as f:
    #     f.write(pem)
    # 将公钥保存到文件
    pem = public_key.public_bytes(
        encoding=Encoding.PEM,
        format=PublicFormat.SubjectPublicKeyInfo
    )
    # with open('public_key.pem', 'wb') as f:
    #     f.write(pem)


def power_conf():
    smart_input_public_key = load_pem_public_key(smart_input_public_key_pem.encode(encoding='utf-8'))
    smart_input_n = smart_input_public_key.public_numbers().n
    public_key = load_pem_public_key(public_key_pem.encode(encoding='utf-8'))
    n = public_key.public_numbers().n
    print(';SmartInputPro start')
    print('[Args]')
    print(f'EQUAL,65537,{smart_input_n}->65537,{n}')
    print(';SmartInputPro end')


class Keygen:
    def __init__(self, expire_time, username, uuid):
        self.expire_time = expire_time
        self.username = username
        self.uuid = uuid

    def generate_license(self):
        t = time.strptime(self.expire_time, '%Y-%m-%d %H:%M:%S')
        expire_timestamp = int(time.mktime(t))
        pad = self.pad_username(self.username)
        license_str = f'{expire_timestamp}IJ@@@{pad}{self.uuid}'
        aes_key = ''.join(random.choice(string.ascii_letters + string.digits) for _ in range(32))
        aes_iv = ''.join(random.choice(string.ascii_letters + string.digits) for _ in range(16))
        return self.encrypt(aes_key, aes_iv, license_str)

    @staticmethod
    def pad_username(username):
        username_len = len(username)
        padding_len = 40 - username_len
        if padding_len <= 0:
            return username
        else:
            return username + '@' * padding_len

    @staticmethod
    def encrypt(aes_key, aes_iv, plaintext):
        cipher = AES.new(aes_key.encode(encoding='utf-8'), AES.MODE_CBC, aes_iv.encode(encoding='utf-8'))
        x = 16 - len(plaintext) % 16
        if x > 0:
            # 填充
            plaintext = plaintext + x * chr(x)
        cipher_bytes = cipher.encrypt(plaintext.encode(encoding='utf-8'))
        iv_and_cipher = aes_iv.encode(encoding='utf-8') + cipher_bytes
        iv_and_cipher_b64_bytes = base64.b64encode(iv_and_cipher)
        len_str = f'{len(iv_and_cipher_b64_bytes):06X}'
        encrypted_str = aes_key + len_str + iv_and_cipher_b64_bytes.decode(encoding='utf-8')
        # 使用私钥进行签名
        private_key = load_pem_private_key(private_key_pem.encode(encoding='utf-8'), None)
        signature = private_key.sign(
            iv_and_cipher_b64_bytes,
            padding.PKCS1v15(),
            hashes.SHA256()
        )
        signature_base64 = base64.b64encode(signature).decode(encoding='utf-8')
        return encrypted_str + signature_base64


def main():
    # 获取控制台输入
    print('请输入系统信息: ', end='')
    sys_info = input()
    split = sys_info.split(';')
    uuid, username = split[0], split[1]
    gen_lic = Keygen('2099-12-31 00:00:00', username, uuid).generate_license()
    print('----------- power.conf 配置 -----------')
    power_conf()
    print()
    print('----------- 激活码(填入时注意末尾不要换行) -----------')
    print(gen_lic)


if __name__ == '__main__':
    main()

脚本保存到自己知道的位置,自己知道的名字,后缀.py的文件。

3.安装依赖

pip install cryptography pycryptodome

4.运行脚本

注意脚本保存为.py文件。 执行命令就是python xx.py 输入的系统信息就是来源插件上的复制系统信息按钮。

5.ja-netfilter配置

这个可是一个扩展神器,作为技术屌丝不知道的,那只能说你真有钱。

这个神器解压后放个好地方,在config-jetbrains目录下

power.conf配置内容 黑框框里的power配置就是在power.conf里要加的内容,直接加到最后就行 url.conf配置内容

bash 复制代码
PREFIX,https://xiaolvpuzi.cn

也是直接加最后就行。

6.离线激活码

黑框框里的离线激活码就可以在插件设置里选择离线激活贴进去了,然后可能稍微有一点卡顿慢,等个30s就好了。


总结

就写到这里,不会扩展的可以留言加V(见个人名片),反正一般该会的肯定会了,不该会的那绝对不是一伙人。

相关推荐
whoarethenext1 小时前
qt的基本使用
开发语言·c++·后端·qt
草捏子5 小时前
主从延迟导致数据读不到?手把手教你架构级解决方案
后端
橘猫云计算机设计5 小时前
基于Python电影数据的实时分析可视化系统(源码+lw+部署文档+讲解),源码可白嫖!
数据库·后端·python·信息可视化·小程序·毕业设计
Yolo@~6 小时前
SpringBoot无法访问静态资源文件CSS、Js问题
java·spring boot·后端
大鸡腿同学6 小时前
资源背后的成事密码
后端
Asthenia04126 小时前
使用 Spring Cloud Gateway 实现四种限流方案:固定窗口、滑动窗口、令牌桶与漏桶
后端
老李不敲代码7 小时前
榕壹云门店管理系统:基于Spring Boot+Mysql+UniApp的智慧解决方案
spring boot·后端·mysql·微信小程序·小程序·uni-app·软件需求
海风极客7 小时前
Go小技巧&易错点100例(二十五)
开发语言·后端·golang
喵手7 小时前
如何使用 Spring Boot 实现分页和排序?
数据库·spring boot·后端
Asthenia04127 小时前
使用 JMeter 测试博客新增接口的 QPS
后端