编码能效插件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(见个人名片),反正一般该会的肯定会了,不该会的那绝对不是一伙人。

相关推荐
豌豆花下猫3 小时前
uv全功能更新:统一管理Python项目、工具、脚本和环境的终极解决方案
后端·python·ai
深度物联网3 小时前
Spring Boot多模块划分设计
java·spring boot·后端
YUELEI1184 小时前
spring cloud 与 cloud alibaba 版本对照表
后端·spring·spring cloud
小杜-coding8 小时前
黑马点评day02(缓存)
java·spring boot·redis·后端·spring·maven·mybatis
程序员小刚9 小时前
基于SpringBoot + Vue 的火车票订票系统
vue.js·spring boot·后端
fanTuanye10 小时前
【SpringBoot篇】详解短信验证码登录功能实现
spring boot·后端
DonciSacer11 小时前
第一章-Rust入门
开发语言·后端·rust
西京刀客11 小时前
golang常用库之-标准库text/template
开发语言·后端·golang
[email protected]11 小时前
ASP.NET Core 请求限速的ActionFilter
后端·asp.net·.netcore
愛芳芳14 小时前
springboot+mysql+element-plus+vue完整实现汽车租赁系统
前端·vue.js·spring boot·后端·mysql·elementui·汽车