This commit is contained in:
qianxiao996 2022-07-21 16:40:01 +08:00
parent 24db7a9272
commit 92019c76bc
50 changed files with 4991 additions and 3211 deletions

File diff suppressed because it is too large Load Diff

View File

@ -1,48 +0,0 @@
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'Binary.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Binary(object):
def setupUi(self, Binary):
Binary.setObjectName("Binary")
Binary.resize(330, 69)
self.enter = QtWidgets.QPushButton(Binary)
self.enter.setGeometry(QtCore.QRect(220, 20, 93, 31))
self.enter.setObjectName("enter")
self.splitter_2 = QtWidgets.QSplitter(Binary)
self.splitter_2.setGeometry(QtCore.QRect(10, 20, 109, 31))
self.splitter_2.setOrientation(QtCore.Qt.Horizontal)
self.splitter_2.setObjectName("splitter_2")
self.label = QtWidgets.QLabel(self.splitter_2)
self.label.setObjectName("label")
self.Source = QtWidgets.QLineEdit(self.splitter_2)
self.Source.setObjectName("Source")
self.splitter = QtWidgets.QSplitter(Binary)
self.splitter.setGeometry(QtCore.QRect(130, 20, 77, 31))
self.splitter.setOrientation(QtCore.Qt.Horizontal)
self.splitter.setObjectName("splitter")
self.result_label = QtWidgets.QLabel(self.splitter)
self.result_label.setObjectName("result_label")
self.result = QtWidgets.QLineEdit(self.splitter)
self.result.setObjectName("result")
self.retranslateUi(Binary)
QtCore.QMetaObject.connectSlotsByName(Binary)
Binary.setTabOrder(self.Source, self.result)
Binary.setTabOrder(self.result, self.enter)
def retranslateUi(self, Binary):
_translate = QtCore.QCoreApplication.translate
Binary.setWindowTitle(_translate("Binary", "进制转换"))
self.enter.setText(_translate("Binary", "确定"))
self.label.setText(_translate("Binary", "From"))
self.result_label.setText(_translate("Binary", "To"))

82
GUI/Cipher.py Normal file
View File

@ -0,0 +1,82 @@
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'Cipher.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Cipher(object):
def setupUi(self, Cipher):
Cipher.setObjectName("Cipher")
Cipher.resize(584, 252)
self.gridLayout = QtWidgets.QGridLayout(Cipher)
self.gridLayout.setObjectName("gridLayout")
self.plainTextEdit_source = QtWidgets.QPlainTextEdit(Cipher)
self.plainTextEdit_source.setObjectName("plainTextEdit_source")
self.gridLayout.addWidget(self.plainTextEdit_source, 0, 0, 1, 2)
self.verticalLayout_2 = QtWidgets.QVBoxLayout()
self.verticalLayout_2.setObjectName("verticalLayout_2")
self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
self.label_key1 = QtWidgets.QLabel(Cipher)
self.label_key1.setObjectName("label_key1")
self.horizontalLayout_2.addWidget(self.label_key1)
self.lineEdit_key1 = QtWidgets.QLineEdit(Cipher)
self.lineEdit_key1.setMinimumSize(QtCore.QSize(234, 0))
self.lineEdit_key1.setObjectName("lineEdit_key1")
self.horizontalLayout_2.addWidget(self.lineEdit_key1)
self.verticalLayout_2.addLayout(self.horizontalLayout_2)
self.horizontalLayout_3 = QtWidgets.QHBoxLayout()
self.horizontalLayout_3.setObjectName("horizontalLayout_3")
self.label_key2 = QtWidgets.QLabel(Cipher)
self.label_key2.setObjectName("label_key2")
self.horizontalLayout_3.addWidget(self.label_key2)
self.lineEdit_key2 = QtWidgets.QLineEdit(Cipher)
self.lineEdit_key2.setMinimumSize(QtCore.QSize(234, 0))
self.lineEdit_key2.setObjectName("lineEdit_key2")
self.horizontalLayout_3.addWidget(self.lineEdit_key2)
self.verticalLayout_2.addLayout(self.horizontalLayout_3)
self.gridLayout.addLayout(self.verticalLayout_2, 1, 0, 1, 1)
self.verticalLayout = QtWidgets.QVBoxLayout()
self.verticalLayout.setObjectName("verticalLayout")
self.horizontalLayout = QtWidgets.QHBoxLayout()
self.horizontalLayout.setObjectName("horizontalLayout")
self.label_key3 = QtWidgets.QLabel(Cipher)
self.label_key3.setObjectName("label_key3")
self.horizontalLayout.addWidget(self.label_key3)
self.lineEdit_key3 = QtWidgets.QLineEdit(Cipher)
self.lineEdit_key3.setObjectName("lineEdit_key3")
self.horizontalLayout.addWidget(self.lineEdit_key3)
self.verticalLayout.addLayout(self.horizontalLayout)
self.horizontalLayout_4 = QtWidgets.QHBoxLayout()
self.horizontalLayout_4.setObjectName("horizontalLayout_4")
self.pushButton_enter = QtWidgets.QPushButton(Cipher)
self.pushButton_enter.setObjectName("pushButton_enter")
self.horizontalLayout_4.addWidget(self.pushButton_enter)
self.pushButton_close = QtWidgets.QPushButton(Cipher)
self.pushButton_close.setObjectName("pushButton_close")
self.horizontalLayout_4.addWidget(self.pushButton_close)
self.verticalLayout.addLayout(self.horizontalLayout_4)
self.gridLayout.addLayout(self.verticalLayout, 1, 1, 1, 1)
self.retranslateUi(Cipher)
QtCore.QMetaObject.connectSlotsByName(Cipher)
def retranslateUi(self, Cipher):
_translate = QtCore.QCoreApplication.translate
Cipher.setWindowTitle(_translate("Cipher", "KEY3"))
self.plainTextEdit_source.setPlaceholderText(_translate("Cipher", "在这里输入密文"))
self.label_key1.setText(_translate("Cipher", "Key1"))
self.lineEdit_key1.setPlaceholderText(_translate("Cipher", "可选字段"))
self.label_key2.setText(_translate("Cipher", "Key2"))
self.lineEdit_key2.setPlaceholderText(_translate("Cipher", "可选字段"))
self.label_key3.setText(_translate("Cipher", "key3"))
self.lineEdit_key3.setPlaceholderText(_translate("Cipher", "可选字段"))
self.pushButton_enter.setText(_translate("Cipher", "确定"))
self.pushButton_close.setText(_translate("Cipher", "取消"))

View File

@ -32,9 +32,9 @@ class Ui_KEY2(object):
self.gridLayout.addLayout(self.horizontalLayout, 0, 0, 1, 1)
self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
self.keyl_2 = QtWidgets.QLabel(KEY2)
self.keyl_2.setObjectName("keyl_2")
self.horizontalLayout_2.addWidget(self.keyl_2)
self.key_2 = QtWidgets.QLabel(KEY2)
self.key_2.setObjectName("key_2")
self.horizontalLayout_2.addWidget(self.key_2)
self.Key2 = QtWidgets.QLineEdit(KEY2)
self.Key2.setObjectName("Key2")
self.horizontalLayout_2.addWidget(self.Key2)
@ -52,5 +52,5 @@ class Ui_KEY2(object):
KEY2.setWindowTitle(_translate("KEY2", "KEY"))
self.key_1.setText(_translate("KEY2", "Keys 1"))
self.enter.setText(_translate("KEY2", "确定"))
self.keyl_2.setText(_translate("KEY2", "Keys 2"))
self.key_2.setText(_translate("KEY2", "Keys 2"))
self.quxiao.setText(_translate("KEY2", "取消"))

View File

@ -14,7 +14,7 @@ from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Form_Xiandaimima(object):
def setupUi(self, Form_Xiandaimima):
Form_Xiandaimima.setObjectName("Form_Xiandaimima")
Form_Xiandaimima.resize(992, 696)
Form_Xiandaimima.resize(939, 696)
self.gridLayout = QtWidgets.QGridLayout(Form_Xiandaimima)
self.gridLayout.setObjectName("gridLayout")
self.tabWidget = QtWidgets.QTabWidget(Form_Xiandaimima)
@ -30,6 +30,15 @@ class Ui_Form_Xiandaimima(object):
self.verticalLayout.setObjectName("verticalLayout")
self.horizontalLayout = QtWidgets.QHBoxLayout()
self.horizontalLayout.setObjectName("horizontalLayout")
self.label = QtWidgets.QLabel(self.AES)
self.label.setObjectName("label")
self.horizontalLayout.addWidget(self.label)
self.comboBox_type = QtWidgets.QComboBox(self.AES)
self.comboBox_type.setObjectName("comboBox_type")
self.comboBox_type.addItem("")
self.comboBox_type.addItem("")
self.comboBox_type.addItem("")
self.horizontalLayout.addWidget(self.comboBox_type)
self.label_mode = QtWidgets.QLabel(self.AES)
self.label_mode.setObjectName("label_mode")
self.horizontalLayout.addWidget(self.label_mode)
@ -52,12 +61,6 @@ class Ui_Form_Xiandaimima(object):
self.AES_Tianchong.addItem("")
self.AES_Tianchong.addItem("")
self.horizontalLayout.addWidget(self.AES_Tianchong)
self.label_pianyi = QtWidgets.QLabel(self.AES)
self.label_pianyi.setObjectName("label_pianyi")
self.horizontalLayout.addWidget(self.label_pianyi)
self.AES_Pianyi = QtWidgets.QLineEdit(self.AES)
self.AES_Pianyi.setObjectName("AES_Pianyi")
self.horizontalLayout.addWidget(self.AES_Pianyi)
self.label_zifuji = QtWidgets.QLabel(self.AES)
self.label_zifuji.setObjectName("label_zifuji")
self.horizontalLayout.addWidget(self.label_zifuji)
@ -86,6 +89,12 @@ class Ui_Form_Xiandaimima(object):
self.AES_Miyao = QtWidgets.QLineEdit(self.AES)
self.AES_Miyao.setObjectName("AES_Miyao")
self.horizontalLayout_2.addWidget(self.AES_Miyao)
self.label_pianyi = QtWidgets.QLabel(self.AES)
self.label_pianyi.setObjectName("label_pianyi")
self.horizontalLayout_2.addWidget(self.label_pianyi)
self.AES_Pianyi = QtWidgets.QLineEdit(self.AES)
self.AES_Pianyi.setObjectName("AES_Pianyi")
self.horizontalLayout_2.addWidget(self.AES_Pianyi)
self.AES_Encrypto = QtWidgets.QPushButton(self.AES)
self.AES_Encrypto.setMinimumSize(QtCore.QSize(90, 0))
self.AES_Encrypto.setObjectName("AES_Encrypto")
@ -123,7 +132,6 @@ class Ui_Form_Xiandaimima(object):
self.AES_Clear.clicked.connect(self.AES_Source.clear)
self.AES_Clear.clicked.connect(self.AES_Result.clear)
QtCore.QMetaObject.connectSlotsByName(Form_Xiandaimima)
Form_Xiandaimima.setTabOrder(self.AES_Pianyi, self.AES_Miyao)
Form_Xiandaimima.setTabOrder(self.AES_Miyao, self.AES_Source)
Form_Xiandaimima.setTabOrder(self.AES_Source, self.AES_Result)
Form_Xiandaimima.setTabOrder(self.AES_Result, self.AES_Mode)
@ -139,30 +147,34 @@ class Ui_Form_Xiandaimima(object):
_translate = QtCore.QCoreApplication.translate
Form_Xiandaimima.setWindowTitle(_translate("Form_Xiandaimima", "现代密码学"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.RSA), _translate("Form_Xiandaimima", "RSA"))
self.label_mode.setText(_translate("Form_Xiandaimima", "模式"))
self.label.setText(_translate("Form_Xiandaimima", "算法类型"))
self.comboBox_type.setItemText(0, _translate("Form_Xiandaimima", "AES-128"))
self.comboBox_type.setItemText(1, _translate("Form_Xiandaimima", "AES-192"))
self.comboBox_type.setItemText(2, _translate("Form_Xiandaimima", "AES-256"))
self.label_mode.setText(_translate("Form_Xiandaimima", "加密模式"))
self.AES_Mode.setItemText(0, _translate("Form_Xiandaimima", "CBC"))
self.AES_Mode.setItemText(1, _translate("Form_Xiandaimima", "ECB"))
self.AES_Mode.setItemText(2, _translate("Form_Xiandaimima", "CFB"))
self.AES_Mode.setItemText(3, _translate("Form_Xiandaimima", "CTR"))
self.AES_Mode.setItemText(4, _translate("Form_Xiandaimima", "OFB"))
self.label_tianchong.setText(_translate("Form_Xiandaimima", "填充"))
self.label_tianchong.setText(_translate("Form_Xiandaimima", "填充方式"))
self.AES_Tianchong.setItemText(0, _translate("Form_Xiandaimima", "Pkcs7"))
self.AES_Tianchong.setItemText(1, _translate("Form_Xiandaimima", "AnsiX923"))
self.AES_Tianchong.setItemText(2, _translate("Form_Xiandaimima", "Iso10126"))
self.AES_Tianchong.setItemText(3, _translate("Form_Xiandaimima", "ZeroPadding"))
self.AES_Tianchong.setItemText(4, _translate("Form_Xiandaimima", "No Padding"))
self.label_pianyi.setText(_translate("Form_Xiandaimima", "偏移量"))
self.AES_Pianyi.setPlaceholderText(_translate("Form_Xiandaimima", "ECB模式不需要"))
self.label_zifuji.setText(_translate("Form_Xiandaimima", "字符集"))
self.AES_zifuji.setItemText(0, _translate("Form_Xiandaimima", "gb2312"))
self.AES_zifuji.setItemText(1, _translate("Form_Xiandaimima", "gbk"))
self.AES_zifuji.setItemText(2, _translate("Form_Xiandaimima", "gb18030"))
self.AES_zifuji.setItemText(3, _translate("Form_Xiandaimima", "utf-8"))
self.AES_zifuji.setItemText(4, _translate("Form_Xiandaimima", "iso-8859-1"))
self.label_bianma.setText(_translate("Form_Xiandaimima", "密文编码"))
self.label_bianma.setText(_translate("Form_Xiandaimima", "输出密文编码"))
self.AES_Bianma.setItemText(0, _translate("Form_Xiandaimima", "Base64"))
self.AES_Bianma.setItemText(1, _translate("Form_Xiandaimima", "Hex"))
self.label_miyao.setText(_translate("Form_Xiandaimima", "密钥"))
self.label_pianyi.setText(_translate("Form_Xiandaimima", "偏移量"))
self.AES_Pianyi.setPlaceholderText(_translate("Form_Xiandaimima", "ECB模式不需要"))
self.AES_Encrypto.setText(_translate("Form_Xiandaimima", "加密"))
self.AES_Decrypto.setText(_translate("Form_Xiandaimima", "解密"))
self.AES_Clear.setText(_translate("Form_Xiandaimima", "清空"))

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -91,33 +91,9 @@ class Ui_MainWindow(object):
self.tab_add.setStyleSheet("")
self.tab_add.setObjectName("tab_add")
self.verticalLayout_2.addWidget(self.tab_add)
self.yijian_decode = QtWidgets.QPushButton(self.centralwidget)
self.yijian_decode.setMinimumSize(QtCore.QSize(60, 30))
self.yijian_decode.setMaximumSize(QtCore.QSize(100, 16777215))
self.yijian_decode.setStyleSheet("")
self.yijian_decode.setObjectName("yijian_decode")
self.verticalLayout_2.addWidget(self.yijian_decode)
self.yijian_base = QtWidgets.QPushButton(self.centralwidget)
self.yijian_base.setMinimumSize(QtCore.QSize(60, 30))
self.yijian_base.setMaximumSize(QtCore.QSize(100, 16777215))
self.yijian_base.setObjectName("yijian_base")
self.verticalLayout_2.addWidget(self.yijian_base)
self.yijian_decrypto = QtWidgets.QPushButton(self.centralwidget)
self.yijian_decrypto.setMinimumSize(QtCore.QSize(60, 30))
self.yijian_decrypto.setMaximumSize(QtCore.QSize(100, 16777215))
self.yijian_decrypto.setObjectName("yijian_decrypto")
self.verticalLayout_2.addWidget(self.yijian_decrypto)
self.yijian_jinzhi = QtWidgets.QPushButton(self.centralwidget)
self.yijian_jinzhi.setMinimumSize(QtCore.QSize(60, 30))
self.yijian_jinzhi.setMaximumSize(QtCore.QSize(100, 16777215))
self.yijian_jinzhi.setObjectName("yijian_jinzhi")
self.verticalLayout_2.addWidget(self.yijian_jinzhi)
self.zhuanyuan = QtWidgets.QPushButton(self.centralwidget)
self.zhuanyuan.setMinimumSize(QtCore.QSize(60, 30))
self.zhuanyuan.setMaximumSize(QtCore.QSize(100, 16777215))
self.zhuanyuan.setStyleSheet("")
self.zhuanyuan.setObjectName("zhuanyuan")
self.verticalLayout_2.addWidget(self.zhuanyuan)
self.xiandaimima = QtWidgets.QPushButton(self.centralwidget)
self.xiandaimima.setObjectName("xiandaimima")
self.verticalLayout_2.addWidget(self.xiandaimima)
self.Result_Copy_Button = QtWidgets.QPushButton(self.centralwidget)
self.Result_Copy_Button.setMinimumSize(QtCore.QSize(60, 30))
self.Result_Copy_Button.setMaximumSize(QtCore.QSize(100, 16777215))
@ -130,6 +106,23 @@ class Ui_MainWindow(object):
self.Result_clear_Button.setStyleSheet("")
self.Result_clear_Button.setObjectName("Result_clear_Button")
self.verticalLayout_2.addWidget(self.Result_clear_Button)
self.zhuanyuan = QtWidgets.QPushButton(self.centralwidget)
self.zhuanyuan.setMinimumSize(QtCore.QSize(60, 30))
self.zhuanyuan.setMaximumSize(QtCore.QSize(100, 16777215))
self.zhuanyuan.setStyleSheet("")
self.zhuanyuan.setObjectName("zhuanyuan")
self.verticalLayout_2.addWidget(self.zhuanyuan)
self.miwenfenxi = QtWidgets.QPushButton(self.centralwidget)
self.miwenfenxi.setMinimumSize(QtCore.QSize(60, 30))
self.miwenfenxi.setMaximumSize(QtCore.QSize(100, 16777215))
self.miwenfenxi.setStyleSheet("")
self.miwenfenxi.setObjectName("miwenfenxi")
self.verticalLayout_2.addWidget(self.miwenfenxi)
self.auto_get_flag = QtWidgets.QPushButton(self.centralwidget)
self.auto_get_flag.setMinimumSize(QtCore.QSize(60, 30))
self.auto_get_flag.setMaximumSize(QtCore.QSize(100, 16777215))
self.auto_get_flag.setObjectName("auto_get_flag")
self.verticalLayout_2.addWidget(self.auto_get_flag)
self.gridLayout_2.addLayout(self.verticalLayout_2, 0, 1, 1, 1)
MainWindow.setCentralWidget(self.centralwidget)
self.menuBar = QtWidgets.QMenuBar(MainWindow)
@ -137,12 +130,22 @@ class Ui_MainWindow(object):
self.menuBar.setObjectName("menuBar")
self.menuEncode = QtWidgets.QMenu(self.menuBar)
self.menuEncode.setObjectName("menuEncode")
self.menuDecode = QtWidgets.QMenu(self.menuBar)
self.menuDecode.setObjectName("menuDecode")
self.menuJS = QtWidgets.QMenu(self.menuEncode)
self.menuJS.setObjectName("menuJS")
self.menu_3 = QtWidgets.QMenu(self.menuEncode)
self.menu_3.setObjectName("menu_3")
self.menuEncrypt = QtWidgets.QMenu(self.menuBar)
self.menuEncrypt.setObjectName("menuEncrypt")
self.menu_zhalan = QtWidgets.QMenu(self.menuEncrypt)
self.menu_zhalan.setObjectName("menu_zhalan")
self.menuDecrypt = QtWidgets.QMenu(self.menuBar)
self.menuDecrypt.setObjectName("menuDecrypt")
self.menuRot = QtWidgets.QMenu(self.menuDecrypt)
self.menuRot.setObjectName("menuRot")
self.menu_zhanlan_decrypt = QtWidgets.QMenu(self.menuDecrypt)
self.menu_zhanlan_decrypt.setObjectName("menu_zhanlan_decrypt")
self.menu_yufolunchan = QtWidgets.QMenu(self.menuDecrypt)
self.menu_yufolunchan.setObjectName("menu_yufolunchan")
self.menuBinary = QtWidgets.QMenu(self.menuBar)
self.menuBinary.setObjectName("menuBinary")
self.menubase = QtWidgets.QMenu(self.menuBar)
@ -151,6 +154,12 @@ class Ui_MainWindow(object):
self.menubase_2.setObjectName("menubase_2")
self.menu = QtWidgets.QMenu(self.menuBar)
self.menu.setObjectName("menu")
self.menuDecode = QtWidgets.QMenu(self.menuBar)
self.menuDecode.setObjectName("menuDecode")
self.menuJS_2 = QtWidgets.QMenu(self.menuDecode)
self.menuJS_2.setObjectName("menuJS_2")
self.menu_4 = QtWidgets.QMenu(self.menuDecode)
self.menu_4.setObjectName("menu_4")
MainWindow.setMenuBar(self.menuBar)
self.actionURL_UTF8 = QtWidgets.QAction(MainWindow)
self.actionURL_UTF8.setObjectName("actionURL_UTF8")
@ -216,8 +225,6 @@ class Ui_MainWindow(object):
self.actionRot13_decrypt.setObjectName("actionRot13_decrypt")
self.action_zhalan_encrypt = QtWidgets.QAction(MainWindow)
self.action_zhalan_encrypt.setObjectName("action_zhalan_encrypt")
self.action_zhalan_decrypt = QtWidgets.QAction(MainWindow)
self.action_zhalan_decrypt.setObjectName("action_zhalan_decrypt")
self.action_zhalan_w_encrypt = QtWidgets.QAction(MainWindow)
self.action_zhalan_w_encrypt.setObjectName("action_zhalan_w_encrypt")
self.action_zhalan_w_decrypt = QtWidgets.QAction(MainWindow)
@ -462,6 +469,52 @@ class Ui_MainWindow(object):
self.actionhexinjiazhiguan_encode.setObjectName("actionhexinjiazhiguan_encode")
self.action_hexinjiazhiguan_decode = QtWidgets.QAction(MainWindow)
self.action_hexinjiazhiguan_decode.setObjectName("action_hexinjiazhiguan_decode")
self.action_yufolunchan_v1_decrypt = QtWidgets.QAction(MainWindow)
self.action_yufolunchan_v1_decrypt.setObjectName("action_yufolunchan_v1_decrypt")
self.action_yufolunchan_v1_encrypt = QtWidgets.QAction(MainWindow)
self.action_yufolunchan_v1_encrypt.setObjectName("action_yufolunchan_v1_encrypt")
self.actionguanyu = QtWidgets.QAction(MainWindow)
self.actionguanyu.setObjectName("actionguanyu")
self.action_yufolunchan_v2_decrypt = QtWidgets.QAction(MainWindow)
self.action_yufolunchan_v2_decrypt.setObjectName("action_yufolunchan_v2_decrypt")
self.action_yufolunchan_v2_encrypt = QtWidgets.QAction(MainWindow)
self.action_yufolunchan_v2_encrypt.setObjectName("action_yufolunchan_v2_encrypt")
self.actionRot5_decrypt = QtWidgets.QAction(MainWindow)
self.actionRot5_decrypt.setObjectName("actionRot5_decrypt")
self.actionRot18_decrypt = QtWidgets.QAction(MainWindow)
self.actionRot18_decrypt.setObjectName("actionRot18_decrypt")
self.actionRot47_decrypt = QtWidgets.QAction(MainWindow)
self.actionRot47_decrypt.setObjectName("actionRot47_decrypt")
self.action_zhalan_decrypt = QtWidgets.QAction(MainWindow)
self.action_zhalan_decrypt.setObjectName("action_zhalan_decrypt")
self.actionADFGX_encrypt = QtWidgets.QAction(MainWindow)
self.actionADFGX_encrypt.setObjectName("actionADFGX_encrypt")
self.action_ADFGX_decrypt = QtWidgets.QAction(MainWindow)
self.action_ADFGX_decrypt.setObjectName("action_ADFGX_decrypt")
self.action = QtWidgets.QAction(MainWindow)
self.action.setObjectName("action")
self.actionSocialism_encode = QtWidgets.QAction(MainWindow)
self.actionSocialism_encode.setObjectName("actionSocialism_encode")
self.actionSocialism_decode = QtWidgets.QAction(MainWindow)
self.actionSocialism_decode.setObjectName("actionSocialism_decode")
self.actionjother_encode = QtWidgets.QAction(MainWindow)
self.actionjother_encode.setObjectName("actionjother_encode")
self.actionjother_decode = QtWidgets.QAction(MainWindow)
self.actionjother_decode.setObjectName("actionjother_decode")
self.actiona1z26_encrypt = QtWidgets.QAction(MainWindow)
self.actiona1z26_encrypt.setObjectName("actiona1z26_encrypt")
self.actiona1z26_decrypt = QtWidgets.QAction(MainWindow)
self.actiona1z26_decrypt.setObjectName("actiona1z26_decrypt")
self.actionbaijiaxing_encode = QtWidgets.QAction(MainWindow)
self.actionbaijiaxing_encode.setObjectName("actionbaijiaxing_encode")
self.actionbaijiaxing_decode = QtWidgets.QAction(MainWindow)
self.actionbaijiaxing_decode.setObjectName("actionbaijiaxing_decode")
self.menuJS.addAction(self.actionJsFuck_encode)
self.menuJS.addAction(self.actionJJEncode_encode)
self.menuJS.addAction(self.actionAAEncode_encode)
self.menuJS.addAction(self.actionjother_encode)
self.menu_3.addAction(self.actiontupian_hex_encode)
self.menu_3.addAction(self.actiontupian_base64_encode)
self.menuEncode.addAction(self.actionURL_encode)
self.menuEncode.addAction(self.actionUnicode_encode)
self.menuEncode.addAction(self.actionEscape_U_encode)
@ -473,44 +526,37 @@ class Ui_MainWindow(object):
self.menuEncode.addAction(self.actionShellcode_encode)
self.menuEncode.addAction(self.actionQwerty_encode)
self.menuEncode.addAction(self.actionStr_Hex_encode)
self.menuEncode.addAction(self.actiontupian_hex_encode)
self.menuEncode.addAction(self.actiontupian_base64_encode)
self.menuEncode.addAction(self.actionJsFuck_encode)
self.menuEncode.addAction(self.actionJJEncode_encode)
self.menuEncode.addAction(self.actionAAEncode_encode)
self.menuDecode.addAction(self.actionURL_decode)
self.menuDecode.addAction(self.actionUnicode_decode)
self.menuDecode.addAction(self.actionEscape_U_decode)
self.menuDecode.addAction(self.actionHtmlEncode_decode)
self.menuDecode.addAction(self.actionASCII_2_decode)
self.menuDecode.addAction(self.actionASCII_8_decode)
self.menuDecode.addAction(self.actionASCII_10_decode)
self.menuDecode.addAction(self.actionASCII_16_decode)
self.menuDecode.addAction(self.actionShellcode_decode)
self.menuDecode.addAction(self.actionQwerty_decode)
self.menuDecode.addAction(self.actionHex_Str_decode)
self.menuDecode.addAction(self.actionhex_tupian_decode)
self.menuDecode.addAction(self.actionbase64_tupian_decode)
self.menuDecode.addAction(self.actionJsFuck_decode)
self.menuDecode.addAction(self.actionJJEncode_decode)
self.menuDecode.addAction(self.actionAAEncode_decode)
self.menuEncode.addAction(self.menu_3.menuAction())
self.menuEncode.addAction(self.menuJS.menuAction())
self.menuEncode.addAction(self.actionbaijiaxing_encode)
self.menuEncode.addAction(self.actionSocialism_encode)
self.menu_zhalan.addAction(self.action_zhalan_encrypt)
self.menu_zhalan.addAction(self.action_zhalan_w_encrypt)
self.menuEncrypt.addAction(self.actionRot13_encrypt)
self.menuEncrypt.addAction(self.action_kaisa_encrypt)
self.menuEncrypt.addAction(self.action_zhalan_encrypt)
self.menuEncrypt.addAction(self.action_zhalan_w_encrypt)
self.menuEncrypt.addAction(self.menu_zhalan.menuAction())
self.menuEncrypt.addAction(self.action_peigen_encrypt)
self.menuEncrypt.addAction(self.action_mosi_encrypt)
self.menuEncrypt.addAction(self.action_yunying_encrypt)
self.menuEncrypt.addAction(self.action_dangpu_encrypt)
self.menuEncrypt.addAction(self.action_sifang_encrypt)
self.menuEncrypt.addAction(self.action_fangshe_encrypt)
self.menuEncrypt.addAction(self.actiona1z26_encrypt)
self.menuEncrypt.addAction(self.action_Atbash_encrypt)
self.menuEncrypt.addAction(self.action_yufolunchan_v2_encrypt)
self.menuEncrypt.addAction(self.action_weinijiya_encrypt)
self.menuEncrypt.addAction(self.action_xiandaimima)
self.menuDecrypt.addAction(self.actionRot13_decrypt)
self.menuEncrypt.addAction(self.actionADFGX_encrypt)
self.menuRot.addAction(self.actionRot5_decrypt)
self.menuRot.addAction(self.actionRot13_decrypt)
self.menuRot.addAction(self.actionRot18_decrypt)
self.menuRot.addAction(self.actionRot47_decrypt)
self.menu_zhanlan_decrypt.addAction(self.action_zhalan_decrypt)
self.menu_zhanlan_decrypt.addAction(self.action_zhalan_w_decrypt)
self.menu_yufolunchan.addAction(self.action_yufolunchan_v1_decrypt)
self.menu_yufolunchan.addAction(self.action_yufolunchan_v2_decrypt)
self.menuDecrypt.addAction(self.menuRot.menuAction())
self.menuDecrypt.addAction(self.action_kaisa_decrypt)
self.menuDecrypt.addAction(self.action_zhalan_decrypt)
self.menuDecrypt.addAction(self.action_zhalan_w_decrypt)
self.menuDecrypt.addAction(self.menu_zhanlan_decrypt.menuAction())
self.menuDecrypt.addAction(self.action_peihen_decrypt)
self.menuDecrypt.addAction(self.action_mosi_decrypt)
self.menuDecrypt.addAction(self.action_yiwei_decrypt)
@ -518,8 +564,11 @@ class Ui_MainWindow(object):
self.menuDecrypt.addAction(self.action_dangpu_decry)
self.menuDecrypt.addAction(self.action_sifang_decrypt)
self.menuDecrypt.addAction(self.action_fangshe_decrypt)
self.menuDecrypt.addAction(self.actiona1z26_decrypt)
self.menuDecrypt.addAction(self.action_Atbash_decrypt)
self.menuDecrypt.addAction(self.menu_yufolunchan.menuAction())
self.menuDecrypt.addAction(self.action_weinijiya_decrypt)
self.menuDecrypt.addAction(self.action_ADFGX_decrypt)
self.menuBinary.addAction(self.action2_8)
self.menuBinary.addAction(self.action2_10)
self.menuBinary.addAction(self.action2_16)
@ -562,6 +611,27 @@ class Ui_MainWindow(object):
self.menu.addAction(self.action_str_re)
self.menu.addAction(self.action_str_xiaoxie)
self.menu.addAction(self.action_str_daxie)
self.menuJS_2.addAction(self.actionJsFuck_decode)
self.menuJS_2.addAction(self.actionJJEncode_decode)
self.menuJS_2.addAction(self.actionAAEncode_decode)
self.menuJS_2.addAction(self.actionjother_decode)
self.menu_4.addAction(self.actionhex_tupian_decode)
self.menu_4.addAction(self.actionbase64_tupian_decode)
self.menuDecode.addAction(self.actionURL_decode)
self.menuDecode.addAction(self.actionUnicode_decode)
self.menuDecode.addAction(self.actionEscape_U_decode)
self.menuDecode.addAction(self.actionHtmlEncode_decode)
self.menuDecode.addAction(self.actionASCII_2_decode)
self.menuDecode.addAction(self.actionASCII_8_decode)
self.menuDecode.addAction(self.actionASCII_10_decode)
self.menuDecode.addAction(self.actionASCII_16_decode)
self.menuDecode.addAction(self.actionShellcode_decode)
self.menuDecode.addAction(self.actionQwerty_decode)
self.menuDecode.addAction(self.actionHex_Str_decode)
self.menuDecode.addAction(self.menu_4.menuAction())
self.menuDecode.addAction(self.menuJS_2.menuAction())
self.menuDecode.addAction(self.actionbaijiaxing_decode)
self.menuDecode.addAction(self.actionSocialism_decode)
self.menuBar.addAction(self.menuEncode.menuAction())
self.menuBar.addAction(self.menuDecode.menuAction())
self.menuBar.addAction(self.menubase.menuAction())
@ -576,15 +646,14 @@ class Ui_MainWindow(object):
QtCore.QMetaObject.connectSlotsByName(MainWindow)
MainWindow.setTabOrder(self.Source_clear_Button, self.Source_Copy_Button)
MainWindow.setTabOrder(self.Source_Copy_Button, self.Source_Paste_Button)
MainWindow.setTabOrder(self.Source_Paste_Button, self.Result_clear_Button)
MainWindow.setTabOrder(self.Result_clear_Button, self.Result_Copy_Button)
MainWindow.setTabOrder(self.Result_Copy_Button, self.zhuanyuan)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "CTF Tools By qianxiao996 "))
self.source_text.setText(_translate("MainWindow", "Source"))
self.Source_text.setPlaceholderText(_translate("MainWindow", "请在此处输入"))
self.result_text.setText(_translate("MainWindow", "Result"))
self.Result_text.setPlaceholderText(_translate("MainWindow", "结果会显示在此处"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), _translate("MainWindow", "996"))
self.checkBox_line.setText(_translate("MainWindow", "按行处理"))
self.encode_type.setItemText(0, _translate("MainWindow", "UTF-8"))
@ -595,21 +664,28 @@ class Ui_MainWindow(object):
self.Source_Copy_Button.setText(_translate("MainWindow", "复制"))
self.Source_clear_Button.setText(_translate("MainWindow", "清空"))
self.tab_add.setText(_translate("MainWindow", "增加tab"))
self.yijian_decode.setText(_translate("MainWindow", "一键解码"))
self.yijian_base.setText(_translate("MainWindow", "一键Base"))
self.yijian_decrypto.setText(_translate("MainWindow", "一键解密"))
self.yijian_jinzhi.setText(_translate("MainWindow", "一键进制"))
self.zhuanyuan.setText(_translate("MainWindow", "转源文本"))
self.xiandaimima.setText(_translate("MainWindow", "现代密码"))
self.Result_Copy_Button.setText(_translate("MainWindow", "复制"))
self.Result_clear_Button.setText(_translate("MainWindow", "清空"))
self.zhuanyuan.setText(_translate("MainWindow", "转源文本"))
self.miwenfenxi.setText(_translate("MainWindow", "密文分析"))
self.auto_get_flag.setText(_translate("MainWindow", "提取Flag"))
self.menuEncode.setTitle(_translate("MainWindow", "常见编码"))
self.menuDecode.setTitle(_translate("MainWindow", "常见解码"))
self.menuJS.setTitle(_translate("MainWindow", "JS加密系列"))
self.menu_3.setTitle(_translate("MainWindow", "图片转换"))
self.menuEncrypt.setTitle(_translate("MainWindow", "加密"))
self.menu_zhalan.setTitle(_translate("MainWindow", "栅栏密码"))
self.menuDecrypt.setTitle(_translate("MainWindow", "解密"))
self.menuRot.setTitle(_translate("MainWindow", "Rot系列"))
self.menu_zhanlan_decrypt.setTitle(_translate("MainWindow", "栅栏密码"))
self.menu_yufolunchan.setTitle(_translate("MainWindow", "与佛论禅"))
self.menuBinary.setTitle(_translate("MainWindow", "进制转换"))
self.menubase.setTitle(_translate("MainWindow", "Base编码"))
self.menubase_2.setTitle(_translate("MainWindow", "Base解码"))
self.menu.setTitle(_translate("MainWindow", "字符处理"))
self.menuDecode.setTitle(_translate("MainWindow", "常见解码"))
self.menuJS_2.setTitle(_translate("MainWindow", "JS加密系列"))
self.menu_4.setTitle(_translate("MainWindow", "图片转换"))
self.actionURL_UTF8.setText(_translate("MainWindow", "URL-UTF8 Encode"))
self.actionURL_GB2312.setText(_translate("MainWindow", "URL-GB2312 Encode"))
self.actionUnicode.setText(_translate("MainWindow", "Unicode Encode"))
@ -642,7 +718,6 @@ class Ui_MainWindow(object):
self.actionRot13_encrypt.setText(_translate("MainWindow", "Rot13"))
self.actionRot13_decrypt.setText(_translate("MainWindow", "Rot13"))
self.action_zhalan_encrypt.setText(_translate("MainWindow", "栅栏密码"))
self.action_zhalan_decrypt.setText(_translate("MainWindow", "栅栏密码"))
self.action_zhalan_w_encrypt.setText(_translate("MainWindow", "栅栏密码(W型)"))
self.action_zhalan_w_decrypt.setText(_translate("MainWindow", "栅栏密码(W型)"))
self.action_zhujuan_encrypt.setText(_translate("MainWindow", "猪圈密码"))
@ -765,3 +840,23 @@ class Ui_MainWindow(object):
self.actionUUEncode_encode.setText(_translate("MainWindow", "UUEncode"))
self.actionhexinjiazhiguan_encode.setText(_translate("MainWindow", "核心价值观"))
self.action_hexinjiazhiguan_decode.setText(_translate("MainWindow", "核心价值观"))
self.action_yufolunchan_v1_decrypt.setText(_translate("MainWindow", "与佛论禅 1.0"))
self.action_yufolunchan_v1_encrypt.setText(_translate("MainWindow", "与佛论禅 1.0"))
self.actionguanyu.setText(_translate("MainWindow", "guanyu"))
self.action_yufolunchan_v2_decrypt.setText(_translate("MainWindow", "与佛论禅 2.0"))
self.action_yufolunchan_v2_encrypt.setText(_translate("MainWindow", "与佛论禅 2.0"))
self.actionRot5_decrypt.setText(_translate("MainWindow", "Rot5"))
self.actionRot18_decrypt.setText(_translate("MainWindow", "Rot18"))
self.actionRot47_decrypt.setText(_translate("MainWindow", "Rot47"))
self.action_zhalan_decrypt.setText(_translate("MainWindow", "栅栏密码"))
self.actionADFGX_encrypt.setText(_translate("MainWindow", "棋盘密码(ADFGX)"))
self.action_ADFGX_decrypt.setText(_translate("MainWindow", "棋盘密码(ADFGX)"))
self.action.setText(_translate("MainWindow", "核心价值观编码"))
self.actionSocialism_encode.setText(_translate("MainWindow", "核心价值观编码"))
self.actionSocialism_decode.setText(_translate("MainWindow", "核心价值观解码"))
self.actionjother_encode.setText(_translate("MainWindow", "jother"))
self.actionjother_decode.setText(_translate("MainWindow", "jother"))
self.actiona1z26_encrypt.setText(_translate("MainWindow", "a1z26密码"))
self.actiona1z26_decrypt.setText(_translate("MainWindow", "a1z26密码"))
self.actionbaijiaxing_encode.setText(_translate("MainWindow", "百家姓编码"))
self.actionbaijiaxing_decode.setText(_translate("MainWindow", "百家姓编码"))

View File

@ -1,3 +1,24 @@
def run(source_text):
result='插件测试'
return result
######################No UI ##########################
# 普通函数不打开ui插件
# def run(source_text,UI_1,UI_2):
# result='插件测试'
# return [1,result,"插件测试"]
######################UI 1 ##########################
#打开UI1
# def run(source_text,UI_1,UI_2):
# #参数解释1调用的函数 2窗口标题 3、label文字
# UI_1('ui_1_click', '窗口标题', 'Label')
# return None
# def ui_1_click(text,key1):
# # 返回结果
# return "编码结果"
######################UI 2 ##########################
#打开UI2
def run(source_text,UI_1,UI_2):
#参数解释1调用的函数 2窗口标题 3、label文字
UI_2('ui_2_click', '窗口标题', 'Label1',"Label2")
return None
def ui_2_click(text,key1,key2):
# 返回结果
return "编码结果"

57
QWidget_XiandaiMima.py Normal file
View File

@ -0,0 +1,57 @@
from PyQt5 import QtGui
from PyQt5.QtWidgets import QWidget, QMessageBox
from GUI.Xiandaimima import Ui_Form_Xiandaimima
from module.func_aes import Class_Aes
class QWidget_XiandaiMima(QWidget):
def __init__(self):
super().__init__()
self.Ui_X = Ui_Form_Xiandaimima()
self.Ui_X.setupUi(self)
self.setWindowIcon(QtGui.QIcon('./logo.ico'))
self.Ui_X.AES_Encrypto.clicked.connect(self.AES_Encrypto)
self.Ui_X.AES_Decrypto.clicked.connect(self.AES_Decrypto)
self.Ui_X.AES_Mode.activated[str].connect(self.change_aes_setting)
def change_aes_setting(self):
AES_Mode = self.Ui_X.AES_Mode.currentText()
if AES_Mode == 'ECB':
self.Ui_X.AES_Pianyi.setEnabled(False)
else:
self.Ui_X.AES_Pianyi.setEnabled(True)
def AES_Encrypto(self):
aes_mode = self.Ui_X.AES_Mode.currentText()
aes_zifuji = self.Ui_X.AES_zifuji.currentText()
aes_tianchong = self.Ui_X.AES_Tianchong.currentText()
aes_iv = self.Ui_X.AES_Pianyi.text()
aes_encode = self.Ui_X.AES_Bianma.currentText()
aes_key = self.Ui_X.AES_Miyao.text()
aes_m_text = self.Ui_X.AES_Source.toPlainText()
aes_type = self.Ui_X.comboBox_type.currentText()
result_text = getattr(Class_Aes(), 'encrypt')(aes_type,aes_mode, aes_zifuji, aes_tianchong, aes_iv, aes_encode, aes_key,aes_m_text)
if result_text[0] == 'success':
self.Ui_X.AES_Result.setPlainText(result_text[1])
elif result_text[0] == 'error':
QMessageBox.critical(self, 'Error', result_text[1])
else:
QMessageBox.information(self, 'INFO', result_text[1])
def AES_Decrypto(self):
aes_mode = self.Ui_X.AES_Mode.currentText()
aes_zifuji = self.Ui_X.AES_zifuji.currentText()
aes_iv = self.Ui_X.AES_Pianyi.text()
aes_encode = self.Ui_X.AES_Bianma.currentText()
aes_key = self.Ui_X.AES_Miyao.text()
aes_m_text = self.Ui_X.AES_Result.toPlainText()
aes_type = self.Ui_X.comboBox_type.currentText()
result_text = getattr(Class_Aes(), 'decrypt')(aes_type,aes_mode, aes_zifuji, aes_iv, aes_encode, aes_key,aes_m_text)
if result_text[0] == 'success':
self.Ui_X.AES_Source.setPlainText(result_text[1])
elif result_text[0] == 'error':
QMessageBox.critical(self, 'Error', result_text[1])
else:
QMessageBox.information(self, 'INFO', result_text[1])

View File

@ -38,6 +38,12 @@
- [x] AAEncode
- [x] jother
- [x] 百家姓编码
- [x] 核心价值观编码
##### 支持的base编码
- [x] Base16
@ -48,6 +54,8 @@
- [x] Base58
- [x] Base62
- [x] Base64
- [x] Base64(自定义)
@ -75,8 +83,10 @@
- [x] 当铺密码
- [x] 四方密码
- [x] 仿射密码
- [x] a1z26密码
- [x] 维尼吉亚密码
- [x] 埃特巴什码
- [x] 与佛论禅
##### 进制转换:
@ -116,10 +126,30 @@
插件模板
```
def run(source_text):
#source_text 为前端输入的源文本字符串
#插件测试模板,返回一个加密解密结果即可
result='插件测试'
return result
######################No UI ##########################
# 普通函数不打开ui插件
# def run(source_text,UI_1,UI_2):
# result='插件测试'
# return [1,result,"插件测试"]
######################UI 1 ##########################
#打开UI1
# def run(source_text,UI_1,UI_2):
# #参数解释1调用的函数 2窗口标题 3、label文字
# UI_1('ui_1_click', '窗口标题', 'Label')
# return None
# def ui_1_click(text,key1):
# # 返回结果
# return "编码结果"
######################UI 2 ##########################
#打开UI2
def run(source_text,UI_1,UI_2):
#参数解释1调用的函数 2窗口标题 3、label文字
UI_2('ui_2_click', '窗口标题', 'Label1',"Label2")
return None
def ui_2_click(text,key1,key2):
# 返回结果
return "编码结果"
```

Binary file not shown.

View File

@ -1,5 +1,5 @@
[QSS_Setup]
qss = default.qss
qss = black.qss
[QSS_List]
默认皮肤 = default.qss
@ -8,5 +8,6 @@ qss = default.qss
黑色炫酷 = black_2.qss
mac风格 = mac.qss
[Skin]
default = 默认皮肤

185
module/AutoGetFlag.py Normal file
View File

@ -0,0 +1,185 @@
# GUI 独立程序 密文分析
import importlib
import json,time,os,sys
from treelib import Tree
from PyQt5.QtCore import QThread, pyqtSignal
if hasattr(sys, 'frozen'):
os.environ['PATH'] = sys._MEIPASS + ";" + os.environ['PATH']
from module.func_binary import Class_Binary
from module.func_decode import Class_Decode
from module.func_encrypt import Class_Encrypt
from module.func_encode import Class_Encode
from module.func_tools import Class_Tools
from module.func_decrypt import Class_Decrypt
# 识别密文
def Cipherase(cryptostr, key1, key2, key3):
all_jiemi_result = []
# 存放所有可调用的方法
class_methods_list = []
# 导入自定义解密插件
with open("Plugins/Plugins.json", 'r+', encoding='utf-8') as f:
Crypto_json = json.load(f)
for i in Crypto_json:
plugins_filename = "Plugins/" + Crypto_json[i]
plugins_methods = "Plugins/" + Crypto_json[i][:-3]
nnnnnnnnnnnn1 = importlib.machinery.SourceFileLoader(plugins_methods, plugins_filename).load_module()
# 参数一为类对象,二为方法名
class_methods_list.append([nnnnnnnnnnnn1, 'run',i])
# str1 = "import Plugins.{crypto_name}".format(crypto_name=i)
# exec(str1)
for i in ["Class_Decode", "Class_Decrypt"]:
obj = eval(i)
# 得到所有方法
a = (dir(obj))
for j in a:
# print(j[:5])
if j[:5] == "func_":
class_methods_list.append([obj, j,j.replace('func_','')])
for i in class_methods_list:
Function = getattr(i[0], i[1]) # 以字符串的形式执行函数
Function_canshu_num = Function.__code__.co_argcount
result=''
try:
if Function_canshu_num == 3:
result = Function(i[0], 'utf-8', cryptostr)
elif Function_canshu_num == 4:
result = Function(i[0], 'utf-8', cryptostr, key1)
elif Function_canshu_num == 5:
result = Function(i[0], 'utf-8', cryptostr, key1, key2)
elif Function_canshu_num == 6:
result = Function(i[0], 'utf-8', cryptostr, key1,key2,key3)
else:
pass
except:
pass
if result and len(result)>=3 and result[0] and result[1] and result[1]!=cryptostr and len(str(cryptostr)) > len(str(result[1])):
#密码名称,解密结果
all_jiemi_result.append([result[2],cryptostr,result[1]])
return all_jiemi_result
class AutoGetFlag(QThread):
signal = pyqtSignal(list)
def __init__(self, cryptostr, key1, key2, flag_str):
super().__init__()
self.cryptostr = cryptostr
self.key1 = key1
self.key2 = key2
self.flag_str = flag_str
def run(self):
self.depth=10
# 识别密文
#0 识别成功 解密结果 解密类型
result = Cipherase(self.cryptostr, self.key1, self.key2, self.flag_str)
# result=[]
# for i in result_list:
# result.append([i[2],i[0],i[1]])
#
# if self.log:
###################
# 生成第一个父子节点
FandS_node = [] # 0为父节点其他为子节点格式为 [ ["parent","name1","name2"],[...] ]
temp_FS_node = []
cry_path = Tree()
tree = cry_path.create_node(tag='Path',) # 解密路线树
for i in result:
test = cry_path.create_node(tag=i[0], parent=tree)
temp_FS_node.append(test.identifier)
FandS_node.append(temp_FS_node)
###############
Flag = False # 判断flag存不存在的关键词
self.res = ''
filename = ''
cry_cryptostr = ''
depth_s = True
if self.depth != '':
depth_num = int(self.depth) - 1
else:
depth_num=9
while(len(result) != 0 and len(result) < 100 and depth_s and not Flag):
# 每轮广度遍历时初始化变量
temporary = []
result_dict = {}
temp_FandS_node = []
for i in result:
# print(i)
try:
self.res = i[2]
if self.flag_str in i[2]:
# print(i[2])
# self.signal.emit([1,i[2]])
Flag =True
self.res = i[2]
# if self.log:
cry_path.create_node(
tag=i[2], parent=FandS_node[result.index(i)][0], data=i[1])
#########3
break
except:
pass
# 密文分析后的cryptoname
# aaa_result = []
aaa_result = Cipherase(i[2], self.key1, self.key2, self.flag_str)
# for j in fenxi_result:
# aaa_result.append([j[2], j[0], j[1]])
# 不需要导日志则不必要生成crypto_name与name的字典
temp_FS_node = []
# # if self.log and len(FandS_node) != 0:
if len(FandS_node) != 0:
for j in aaa_result:
# print(i)
# print(result.index(i))
test = cry_path.create_node(
tag=j[0], parent=FandS_node[result.index(i)][0], data=j[2])
temp_FS_node.append(test.identifier)
temp_FandS_node.append(temp_FS_node)
temporary.extend(aaa_result)
if Flag:
break
result = temporary
FandS_node = temp_FandS_node
if self.depth != '':
depth_num = depth_num - 1
if depth_num > 0:
depth_s = True
else:
depth_s = False
# print(["查找完成!"])
now2 = time.strftime('%Y-%m-%d %H-%M-%S', time.localtime())
cry_path_name = "./{}.txt".format(now2)
cry_path.save2file(cry_path_name)
# 读取解析树
try:
with open(cry_path_name, "r", encoding="utf-8") as f:
cry_tree = f.read()
os.remove(cry_path_name)
except:
pass
len_k = ''
for k in cry_path.paths_to_leaves():
if len(k) > len(len_k):
len_k = k
# if Flag == False:
# cry_path.create_node(
# tag=self.flag_str + "【无法解密】", parent=len_k[-1])
# 最长解密链 max_long_cry
test_m = []
for m in len_k:
test_m.append(cry_path.get_node(m).tag)
if Flag == False:
test_m.append(self.flag_str)
max_long_cry = ' -> '.join(test_m)
# 最终密文
cry_fin = cry_path.get_node(len_k[-1]).data
textaaa = "\nflag关键词{}\n\n密钥1{}\n\n密钥2{}\n\n深度:{}\n\n初始密文:{}\n\n解析树:\n{}\n最长解密链:\n{}\n\n最终密文:\n{}\n\n最终解密结果:\n{}\n\n".format(
self.flag_str, self.key1,self.key2,self.depth, self.cryptostr, cry_tree, max_long_cry, cry_fin,self.res)
if not Flag:
self.signal.emit([0,textaaa])
else:
self.signal.emit([1,textaaa])

83
module/Buddha.py Normal file
View File

@ -0,0 +1,83 @@
# !/usr/bin/env python3
# pip3 install pycryptodome py7zr -i https://pypi.tuna.tsinghua.edu.cn/simple
# 源码参见 https://github.com/lersh/TudouCode/
# 代码更新 https://github.com/playGitboy/foYu.py/edit/main/%E4%B8%8E%E4%BD%9B%E8%AE%BA%E7%A6%85.py
from Crypto.Cipher import AES
from re import split
from py7zr import SevenZipFile
from io import BytesIO
KEY = b'XDXDtudou@KeyFansClub^_^Encode!!'
IV = b'Potato@Key@_@=_='
foYue = [
'', '', '', '', '', '', '', '', '', '', '殿', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '']
BYTEMARK = ['', '', '', '', '', '', '', '', '', '', '', '']
ruShiWoWen = [
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '亿', '', '', '', '', '', '', '', '殿', '',
'', '', '', '西', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '便', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '']
def DecryptFoYue(ciphertext):
ciphertext = split("[:]", ciphertext)
if len(ciphertext)>1:
ciphertext = "".join(ciphertext[1:]).strip()
else:
ciphertext = ciphertext[0]
data = b''
i = 0
while i < len(ciphertext):
if ciphertext[i] in BYTEMARK:
i = i + 1
data = data + bytes([foYue.index(ciphertext[i]) + 128])
else:
data = data + bytes([foYue.index(ciphertext[i])])
i = i + 1
cryptor = AES.new(KEY, AES.MODE_CBC, IV)
result = cryptor.decrypt(data)
flag = result[-1]
if flag < 16 and result[-flag] == flag:
result = result[:-flag]
return result.decode('utf-16le')
def DecryptRuShiWoWen(ciphertext):
ciphertext = split("[:]", ciphertext)
if len(ciphertext)>1:
ciphertext = "".join(ciphertext[1:]).strip()
else:
ciphertext = ciphertext[0]
data = b''
for i in ciphertext:
data += bytes([ruShiWoWen.index(i)])
cryptor = AES.new(KEY, AES.MODE_CBC, IV)
fsevenZip=SevenZipFile(BytesIO(cryptor.decrypt(data)))
zipContent = fsevenZip.readall()['default'].read()
return zipContent

71
module/CipherAnalyse.py Normal file
View File

@ -0,0 +1,71 @@
# GUI 独立程序 密文分析
import importlib
import json
from PyQt5.QtCore import QThread, pyqtSlot, pyqtSignal
from module.func_binary import Class_Binary
from module.func_decode import Class_Decode
from module.func_encrypt import Class_Encrypt
from module.func_encode import Class_Encode
from module.func_tools import Class_Tools
from module.func_decrypt import Class_Decrypt
class Cipher_Thread(QThread):
signal = pyqtSignal(list)
def __init__(self, cryptostr, key1, key2, key3):
super().__init__()
self.cryptostr = cryptostr
self.key1 = key1
self.key2 = key2
self.key3 = key3
def run(self):
# 识别密文
# 存放所有可调用的方法
class_methods_list = []
# 导入自定义解密插件
with open("Plugins/Plugins.json", 'r+', encoding='utf-8') as f:
Crypto_json = json.load(f)
for i in Crypto_json:
plugins_filename = "Plugins/" + Crypto_json[i]
plugins_methods = "Plugins/" + Crypto_json[i][:-3]
nnnnnnnnnnnn1 = importlib.machinery.SourceFileLoader(plugins_methods, plugins_filename).load_module()
# 参数一为类对象,二为方法名
class_methods_list.append([nnnnnnnnnnnn1, 'run',i])
# str1 = "import Plugins.{crypto_name}".format(crypto_name=i)
# exec(str1)
for i in ["Class_Decode", "Class_Decrypt"]:
obj = eval(i)
# 得到所有方法
a = (dir(obj))
for j in a:
# print(j[:5])
if j[:5] == "func_":
class_methods_list.append([obj, j,j.replace('func_','')])
for i in class_methods_list:
Function = getattr(i[0], i[1]) # 以字符串的形式执行函数
Function_canshu_num = Function.__code__.co_argcount
result=''
try:
status=0
type__ =''
if Function_canshu_num == 3:
status,result,type__= Function(i[0],'utf-8',self.cryptostr)
elif Function_canshu_num == 4:
status,result,type__= Function(i[0],'utf-8',self.cryptostr,self.key1)
elif Function_canshu_num == 5:
status,result,type__ = Function(i[0],'utf-8',self.cryptostr,self.key1,self.key2)
elif Function_canshu_num == 6:
status,result,type__ = Function(i[0],'utf-8',self.cryptostr,self.key1,self.key2,self.key3)
else:
pass
if status and len(result)>=3:
# 发出信号
self.signal.emit([1,type__,result])
except Exception as e:
pass
# self.signal.emit([i[2],str(e)])
self.signal.emit([1,"end",''])

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

1
module/crypto-js.min.js vendored Normal file

File diff suppressed because one or more lines are too long

188
module/func_aes.py Normal file
View File

@ -0,0 +1,188 @@
# coding=utf-8
import binascii
import random
import Crypto.Util.Counter
import Crypto
import base64
from Crypto.Cipher import AES
class Class_Aes:
def buqi_key(self,aes_type,aes_key,aes_zifuji):
if aes_type == 'AES-128':
length = 16
elif aes_type == 'AES-192':
length = 24
elif aes_type == 'AES-256':
length = 32
else:
length = 16
if len(aes_key)>=length:
return aes_key[:length].encode(),length
else:
aes_key = self.aes_buqi_(aes_key.encode(aes_zifuji), length, 'ZeroPadding', 'utf-8')
return aes_key,length
def encrypt(self,aes_type,aes_mode, aes_zifuji, aes_tianchong, aes_iv,aes_encode,aes_key,aes_m_text):
if not aes_key:
return ['error','AES密钥不能为空!']
else:
aes_key,aes_length= self.buqi_key(aes_type,aes_key,aes_zifuji)
if aes_mode not in ["ECB"]:
if len(aes_iv) != 16:
# 32, 48, or 64
return ['error', 'AES偏移长度必须为16位!']
if not aes_iv:
return ['error', '偏移不能为空!']
else:
aes_iv = aes_iv.encode(aes_zifuji)
if not aes_m_text:
return ['', '请输入明文!']
else:
aes_m_text = self.aes_buqi_(aes_m_text.encode(aes_zifuji), 16, aes_tianchong, aes_zifuji)
if aes_mode == "CBC":
cryptor = AES.new(aes_key, AES.MODE_CBC, aes_iv)
elif aes_mode == "ECB":
try:
cryptor = AES.new(aes_key, AES.MODE_ECB)
except Exception as e:
print(str(e))
elif aes_mode == "CFB":
cryptor = AES.new(aes_key, AES.MODE_CFB, aes_iv)
elif aes_mode == "CTR":
ctr = Crypto.Util.Counter.new(128, initial_value=int(binascii.hexlify(aes_iv), 16))
cryptor = AES.new(aes_key, AES.MODE_CTR, counter=ctr)
elif aes_mode == "OFB":
cryptor = AES.new(aes_key, AES.MODE_OFB, aes_iv)
else:
return ['error', '加密模式设置错误!']
return_text = cryptor.encrypt(aes_m_text)
if aes_encode == 'Base64':
return_text = str(base64.encodebytes(return_text), encoding=aes_zifuji).strip()
elif aes_encode == 'Hex':
return_text = str(binascii.b2a_hex(return_text), encoding=aes_zifuji).strip()
# print(return_text)
return ['success', return_text]
def decrypt(self,aes_type,aes_mode, aes_zifuji, aes_iv,aes_encode,aes_key,aes_m_text):
if not aes_key:
return ['error','AES密钥不能为空!']
else:
if len(aes_key)<16:
aes_key = self.aes_buqi_(aes_key.encode(aes_zifuji), 16, 'ZeroPadding', 'utf-8')
elif 16<len(aes_key)<24:
aes_key = self.aes_buqi_(aes_key.encode(aes_zifuji), 24, 'ZeroPadding', 'utf-8')
elif 24<len(aes_key)<32:
aes_key = self.aes_buqi_(aes_key.encode(aes_zifuji), 32, 'ZeroPadding', 'utf-8')
elif len(aes_key) > 32:
return ['error', 'AES密钥最长32位!']
# return ['error', 'AES密钥应为16、24、32位!']
else:
aes_key = aes_key.encode(aes_zifuji)
if aes_mode not in ["ECB"]:
if len(aes_iv) != 16:
return ['error', 'AES偏移长度必须为16位!']
if not aes_iv:
return ['error', '偏移不能为空!']
else:
aes_iv = aes_iv.encode(aes_zifuji)
if not aes_m_text:
return ['error', '请输入密文!']
else:
if aes_encode == 'Base64':
aes_m_text = base64.b64decode(aes_m_text.encode(aes_zifuji))
elif aes_encode == 'Hex':
aes_m_text = bytes.fromhex(aes_m_text)
if aes_mode == "CBC":
cryptor = AES.new(aes_key, AES.MODE_CBC, aes_iv)
elif aes_mode == "ECB":
cryptor = AES.new(aes_key, AES.MODE_ECB)
elif aes_mode == "CFB":
cryptor = AES.new(aes_key, AES.MODE_CFB, aes_iv)
elif aes_mode == "CTR":
ctr = Crypto.Util.Counter.new(128, initial_value=int(binascii.hexlify(aes_iv), 16))
cryptor = AES.new(aes_key, AES.MODE_CTR, counter=ctr)
elif aes_mode == "OFB":
cryptor = AES.new(aes_key, AES.MODE_OFB, aes_iv)
else:
return ['error', '加密模式设置错误!']
try:
return_text = cryptor.decrypt(aes_m_text)
ret = self._unpad(return_text)
return_text = ret.decode(aes_zifuji)
return ['success', return_text]
except:
return ['error', '解密失败!']
def _unpad(self, s):
return s[:-ord(s[len(s) - 1:])]
def aes_buqi_(self, text, length, aes_tianchong, aes_zifuji):
if aes_tianchong == "ZeroPadding":
tianchong_str = '\0'
# length = 16
count = len(text)
if count < length:
add = (length - count)
# \0 backspace
# text = text + ('\0' * add)
text = text + (tianchong_str * add).encode(aes_zifuji)
elif count > length:
add = (length - (count % length))
# text = text + ('\0' * add)
text = text + (tianchong_str * add).encode(aes_zifuji)
return text
elif aes_tianchong == "Pkcs7":
# bs = 16
bs = length
# length = len(text)
# bytes_length = len(text)
# padding_size = length if (bytes_length == length) else bytes_length
padding_size = len(text)
padding = bs - padding_size % bs
padding_text = chr(padding) * padding
# print(text+ padding_text.encode(aes_zifuji))
return (text + padding_text.encode(aes_zifuji))
elif aes_tianchong == "Iso10126":
# bs = 16
bs= length
padding_size = len(text)
padding = bs - padding_size % bs
# * padding-1
qian_Str = ''
for i in range(0, padding - 1):
qian_Str += chr(random.randint(0, 9))
padding_text = qian_Str + chr(padding)
return (text + padding_text.encode(aes_zifuji))
elif aes_tianchong == "AnsiX923":
# bs = 16
bs= length
tianchong_str = '\0'
padding_size = len(text)
padding = bs - padding_size % bs
text = text + (tianchong_str * (padding - 1) + chr(padding)).encode(aes_zifuji)
return text
elif aes_tianchong == "No Padding":
while len(text) % 16 != 0:
text += '\0'.encode(aes_zifuji)
return text
else:
tianchong_str = '\0'
# length = 16
count = len(text)
if count < length:
add = (length - count)
# \0 backspace
# text = text + ('\0' * add)
text = text + (tianchong_str * add).encode(aes_zifuji)
elif count > length:
add = (length - (count % length))
# text = text + ('\0' * add)
text = text + (tianchong_str * add).encode(aes_zifuji)
return text

152
module/func_binary.py Normal file
View File

@ -0,0 +1,152 @@
# coding=utf-8
import base36
import base58
import base62
import base64
import base91
import html
import py3base92
import urllib.parse
import execjs
import js2py
class Class_Binary:
def exec_Binary(self, source_text, Binary_type):
all_result = ''
all_text = source_text.split(" ")
result_text=[0,'']
for text in all_text:
result_text = getattr(self, 'Binary_'+Binary_type)(text)
all_result += str(result_text[1]).replace('0o', '').replace('0x', '').replace('0b', '') + ' '
if all_result != "":
return [result_text[0],all_result,result_text[2]]
else:
return [result_text[0],'转换失败!',result_text[2]]
def Binary_2_8(self, text):
try:
result = int(text, 2)
result_text = str(oct(result))
except Exception as e:
return [0,'您输入的不是2进制','2->8']
return [1,result_text,'2->8']
def Binary_2_10(self, text):
try:
result = int(text, 2)
result_text = str(result)
except Exception as e:
return [0,'您输入的不是2进制','2->10']
return [1,result_text,'2->10']
def Binary_2_16(self, text):
try:
result_text = str(hex(int(text, 2)))
except Exception as e:
return [0,'您输入的不是2进制','2->16']
return [1,result_text,'2->16']
def Binary_8_2(self, text):
try:
result = int(text, 8)
result_text = str(bin(result))
except Exception as e:
return [0,'您输入的不是8进制',"8->2"]
return [1, result_text,"8->2"]
def Binary_8_10(self, text):
try:
result = int(text, 8)
result_text = str(result)
except Exception as e:
return [0,'您输入的不是8进制',"8->10"]
return [1, result_text,"8->10"]
def Binary_8_16(self, text):
try:
result = int(text, 8)
result_text = str(hex(result))
except Exception as e:
return [0,'您输入的不是8进制',"8->16"]
return [1, result_text,"8->16"]
def Binary_10_2(self, text):
try:
s = int(text)
result_text = str(bin(s))
except Exception as e:
return [0,'您输入的不是10进制',"10->2"]
return [1, result_text,"10->2"]
def Binary_10_8(self, text):
try:
s = int(text)
result_text = str(oct(s))
except Exception as e:
return [0,'您输入的不是10进制',"10->8"]
return [1, result_text,"10->8"]
def Binary_10_16(self, text):
try:
s = int(text)
result_text = str(hex(s))
except Exception as e:
return [0,'您输入的不是10进制',"10->16"]
return [1, result_text,"10->16"]
def Binary_16_2(self, text):
try:
result_text = str(bin(int(text, 16)))
except Exception as e:
return [0,'您输入的不是16进制',"16->2"]
return [1, result_text,"16->2"]
def Binary_16_8(self, text):
try:
result = int(text, 16)
result_text = str(oct(result))
except Exception as e:
return [0,'您输入的不是16进制',"16->8"]
return [1, result_text,"16->8"]
def Binary_16_10(self, text):
try:
result = int(text, 16)
result_text = str(result)
except Exception as e:
return [0,'您输入的不是16进制',"16->10"]
return [1, result_text,"16->10"]
def func_renyijinzhi_zhuanhuan(self, encode_type, source_text,key1,key2):
try:
return_Data = ''
if key1 != '' and key2 != '':
all_text = source_text.split(" ")
all_result = ''
for text in all_text:
# # print(text)
from_ = int(key1)
to_ = int(key2)
# from_进制转换为十进制
ten_num = sum([int(i) * from_ ** n for n, i in enumerate(text[::-1])])
# print(ten_num)
# 十进制转换为to_进制
a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'A', 'b', 'C', 'D', 'E', 'F']
b = []
while True:
s = ten_num // to_ # 商
y = ten_num % to_ # 余数
b = b + [y]
if s == 0:
break
ten_num = s
b.reverse()
for i in b:
return_Data += str(a[i])
all_result += return_Data + ' '
return [1, all_result,key1+"->"+key2]
except Exception as e:
return [0, str(e),key1+"->"+key2]

866
module/func_decode.py Normal file
View File

@ -0,0 +1,866 @@
# coding=utf-8
import re
import base36
import base58
import base62
import base64
import base91
import html
import py3base92
import urllib.parse
import execjs
import js2py
from module.jother import Jother
class Class_Decode:
def func_url(self,encode_type,source_text):
try:
result_text = str(urllib.parse.unquote(source_text, encode_type))
except Exception as e:
return [0, '解码失败',"Url编码"]
return [1, result_text.strip(),'Url编码']
def func_unicode(self,encode_type,source_text):
try:
result_text = bytes(source_text, encoding=encode_type).decode('unicode_escape')
except Exception as e:
return [0, '解码失败',"Unicode编码"]
return [1, result_text.strip(),"Unicode编码"]
def func_escape_u(self,encode_type,source_text):
try:
text = source_text.replace('%u', '\\u').replace('%U', '\\u')
result_text = bytes(text, encoding=encode_type).decode('unicode_escape')
except Exception as e:
return [0, '解码失败',"Escape_u编码"]
return [1, result_text.strip(),"Escape_u编码"]
def func_html(self,encode_type,source_text):
try:
result_text = html.unescape(source_text)
except Exception as e:
return [0, '解码失败',"html编码"]
return [1, result_text.strip(),"html编码"]
# 得到分割数据 返回list
def get_split_data(self, text):
if ':' in text:
text = text.split(":")
elif ' ' in text:
text = text.split(" ")
elif ';' in text:
text = text.split(";")
elif ',' in text:
text = text.split(",")
else:
list22 = []
list22.append(text)
text = list22
return text
def func_ASCII_2(self,encode_type,source_text):
try:
text = self.get_split_data(source_text)
# print(text)
result = ''
for i in text:
if i != '':
# print(i)
# print(chr(int(i)))
result = result + chr(int(i, 2))
except Exception as e:
# print(str(e))
return [0, '解码失败',"ASCII(2进制)"]
return [1, result,"ASCII(2进制)"]
def func_ASCII_8(self,encode_type,source_text):
try:
text = self.get_split_data(source_text)
# print(text)
result = ''
for i in text:
if i != '':
# print(i)
# print(chr(int(i)))
result = result + chr(int(i, 8))
except Exception as e:
return [0, '解码失败',"ASCII(8进制)"]
return [1, result,"ASCII(8进制)"]
def func_ASCII_10(self,encode_type,source_text):
try:
text = self.get_split_data(source_text)
# print(text)
result = ''
for i in text:
if i != '':
# print(i)
# print(chr(int(i)))
result = result + chr(int(i))
except Exception as e:
return [0, '解码失败',"ASCII(10进制)"]
return [0, result,"ASCII(10进制)"]
def func_ASCII_16(self,encode_type,source_text):
try:
text = self.get_split_data(source_text)
# print(text)
result = ''
for i in text:
if i != '':
# print(i)
# print(chr(int(i)))
result = result + chr(int(i, 16))
except Exception as e:
return [0, '解码失败',"ASCII(16进制)"]
return [1, result.strip(),"ASCII(16进制)"]
def func_jsfuck(self,encode_type,source_text):
ctx = execjs.compile("""
function decode(source) {
output = ''
if (source.length > 0)
{
l = ''
if (source.length > 3 && source.slice(source.length-3) == ')()')
{
//eval-ed
s = source.slice(0, source.length - 2)
i = s.length
//first try----------------------------
while (i--) {
//if ((l = s.slice(i)).split(')').length == l.split('(').length) break
l = s.slice(i)
if (l.split(')').length == l.split('(').length) {
break;
}
}
//-------------------------------------
}
else
{
l = source;
}
txtResult = eval(l)
return txtResult
}
}
""") # 获取代码编译完成后的对象
return [1, ctx.call("decode", source_text),"Jsfuck"]
def func_jjencode(self,encode_type,source_text):
js = """
var result =''
function jjdecode(t)
{
//get string from src
//clean it
t.replace(/^\\s+|\\s+$/g, "");
var startpos;
var endpos;
var gv;
var gvl;
if (t.indexOf("\\"\\'\\\\\\"+\\'+\\",") == 0) //palindrome check
{
//locate jjcode
startpos = t.indexOf('$$+"\\\\""+') + 8;
endpos = t.indexOf('"\\\\"")())()');
//get gv
gv = t.substring((t.indexOf('"\\'\\\\"+\\'+",')+9), t.indexOf("=~[]"));
gvl = gv.length;
}
else
{
//get gv
gv = t.substr(0, t.indexOf("="));
gvl = gv.length;
//locate jjcode
startpos = t.indexOf('"\\\\""+') + 5;
endpos = t.indexOf('"\\\\"")())()');
}
if (startpos == endpos)
{
alert("No data !");
return;
}
//start decoding
var data = t.substring(startpos, endpos);
//hex decode string
var b=[ "___+", "__$+", "_$_+", "_$$+", "$__+", "$_$+", "$$_+", "$$$+", "$___+", "$__$+", "$_$_+", "$_$$+", "$$__+", "$$_$+", "$$$_+", "$$$$+" ];
//lotu
var str_l = "(![]+\\"\\")[" + gv + "._$_]+";
var str_o = gv + "._$+";
var str_t = gv + ".__+";
var str_u = gv + "._+";
//0123456789abcdef
var str_hex = gv + ".";
//s
var str_s = '"';
var gvsig = gv + ".";
var str_quote = '\\\\\\\\\\\\"';
var str_slash = '\\\\\\\\\\\\\\\\';
var str_lower = "\\\\\\\\\\"+";
var str_upper = "\\\\\\\\\\"+" + gv + "._+";
var str_end = '"+'; //end of s loop
while(data != "")
{
//l o t u
if (0 == data.indexOf(str_l))
{
data = data.substr(str_l.length);
out("l");
continue;
}
else if (0 == data.indexOf(str_o))
{
data = data.substr(str_o.length);
out("o");
continue;
}
else if (0 == data.indexOf(str_t))
{
data = data.substr(str_t.length);
out("t");
continue;
}
else if (0 == data.indexOf(str_u))
{
data = data.substr(str_u.length);
out("u");
continue;
}
//0123456789abcdef
if (0 == data.indexOf(str_hex))
{
data = data.substr(str_hex.length);
//check every element of hex decode string for a match
var i = 0;
for (i = 0; i < b.length; i++)
{
if (0 == data.indexOf(b[i]))
{
data = data.substr( (b[i]).length );
out(i.toString(16));
break;
}
}
continue;
}
//start of s block
if (0 == data.indexOf(str_s))
{
data = data.substr(str_s.length);
//check if "R
if (0 == data.indexOf(str_upper)) // r4 n >= 128
{
data = data.substr(str_upper.length); //skip sig
var ch_str = "";
for (j = 0; j < 2; j++) //shouldn't be more than 2 hex chars
{
//gv + "."+b[ c ]
if (0 == data.indexOf(gvsig))
{
data = data.substr(gvsig.length); //skip gvsig
for (k = 0; k < b.length; k++) //for every entry in b
{
if (0 == data.indexOf(b[k]))
{
data = data.substr(b[k].length);
ch_str += k.toString(16) + "";
break;
}
}
}
else
{
break; //done
}
}
out(String.fromCharCode(parseInt(ch_str,16)));
continue;
}
else if (0 == data.indexOf(str_lower)) //r3 check if "R // n < 128
{
data = data.substr(str_lower.length); //skip sig
var ch_str = "";
var ch_lotux = ""
var temp = "";
var b_checkR1 = 0;
for (j = 0; j < 3; j++) //shouldn't be more than 3 octal chars
{
if (j > 1) //lotu check
{
if (0 == data.indexOf(str_l))
{
data = data.substr(str_l.length);
ch_lotux = "l";
break;
}
else if (0 == data.indexOf(str_o))
{
data = data.substr(str_o.length);
ch_lotux = "o";
break;
}
else if (0 == data.indexOf(str_t))
{
data = data.substr(str_t.length);
ch_lotux = "t";
break;
}
else if (0 == data.indexOf(str_u))
{
data = data.substr(str_u.length);
ch_lotux = "u";
break;
}
}
//gv + "."+b[ c ]
if (0 == data.indexOf(gvsig))
{
temp = data.substr(gvsig.length);
for (k = 0; k < 8; k++) //for every entry in b octal
{
if (0 == temp.indexOf(b[k]))
{
if (parseInt(ch_str + k + "",8) > 128)
{
b_checkR1 = 1;
break;
}
ch_str += k + "";
data = data.substr(gvsig.length); //skip gvsig
data = data.substr(b[k].length);
break;
}
}
if (1 == b_checkR1)
{
if (0 == data.indexOf(str_hex)) //0123456789abcdef
{
data = data.substr(str_hex.length);
//check every element of hex decode string for a match
var i = 0;
for (i = 0; i < b.length; i++)
{
if (0 == data.indexOf(b[i]))
{
data = data.substr( (b[i]).length );
ch_lotux = i.toString(16);
break;
}
}
break;
}
}
}
else
{
break; //done
}
}
out(String.fromCharCode(parseInt(ch_str,8)) + ch_lotux);
continue; //step out of the while loop
}
else //"S ----> "SR or "S+
{
// if there is, loop s until R 0r +
// if there is no matching s block, throw error
var match = 0;
var n;
//searching for mathcing pure s block
while(true)
{
n = data.charCodeAt( 0 );
if (0 == data.indexOf(str_quote))
{
data = data.substr(str_quote.length);
out('"');
match += 1;
continue;
}
else if (0 == data.indexOf(str_slash))
{
data = data.substr(str_slash.length);
out('\\\\');
match += 1;
continue;
}
else if (0 == data.indexOf(str_end)) //reached end off S block ? +
{
if (match == 0)
{
return("+ no match S block: "+data);
return;
}
data = data.substr(str_end.length);
break; //step out of the while loop
}
else if (0 == data.indexOf(str_upper)) //r4 reached end off S block ? - check if "R n >= 128
{
if (match == 0)
{
return("no match S block n>128: "+data);
return;
}
data = data.substr(str_upper.length); //skip sig
var ch_str = "";
var ch_lotux = "";
for (j = 0; j < 10; j++) //shouldn't be more than 10 hex chars
{
if (j > 1) //lotu check
{
if (0 == data.indexOf(str_l))
{
data = data.substr(str_l.length);
ch_lotux = "l";
break;
}
else if (0 == data.indexOf(str_o))
{
data = data.substr(str_o.length);
ch_lotux = "o";
break;
}
else if (0 == data.indexOf(str_t))
{
data = data.substr(str_t.length);
ch_lotux = "t";
break;
}
else if (0 == data.indexOf(str_u))
{
data = data.substr(str_u.length);
ch_lotux = "u";
break;
}
}
//gv + "."+b[ c ]
if (0 == data.indexOf(gvsig))
{
data = data.substr(gvsig.length); //skip gvsig
for (k = 0; k < b.length; k++) //for every entry in b
{
if (0 == data.indexOf(b[k]))
{
data = data.substr(b[k].length);
ch_str += k.toString(16) + "";
break;
}
}
}
else
{
break; //done
}
}
out(String.fromCharCode(parseInt(ch_str,16)));
break; //step out of the while loop
}
else if (0 == data.indexOf(str_lower)) //r3 check if "R // n < 128
{
if (match == 0)
{
return("no match S block n<128: "+data);
return;
}
data = data.substr(str_lower.length); //skip sig
var ch_str = "";
var ch_lotux = ""
var temp = "";
var b_checkR1 = 0;
for (j = 0; j < 3; j++) //shouldn't be more than 3 octal chars
{
if (j > 1) //lotu check
{
if (0 == data.indexOf(str_l))
{
data = data.substr(str_l.length);
ch_lotux = "l";
break;
}
else if (0 == data.indexOf(str_o))
{
data = data.substr(str_o.length);
ch_lotux = "o";
break;
}
else if (0 == data.indexOf(str_t))
{
data = data.substr(str_t.length);
ch_lotux = "t";
break;
}
else if (0 == data.indexOf(str_u))
{
data = data.substr(str_u.length);
ch_lotux = "u";
break;
}
}
//gv + "."+b[ c ]
if (0 == data.indexOf(gvsig))
{
temp = data.substr(gvsig.length);
for (k = 0; k < 8; k++) //for every entry in b octal
{
if (0 == temp.indexOf(b[k]))
{
if (parseInt(ch_str + k + "",8) > 128)
{
b_checkR1 = 1;
break;
}
ch_str += k + "";
data = data.substr(gvsig.length); //skip gvsig
data = data.substr(b[k].length);
break;
}
}
if (1 == b_checkR1)
{
if (0 == data.indexOf(str_hex)) //0123456789abcdef
{
data = data.substr(str_hex.length);
//check every element of hex decode string for a match
var i = 0;
for (i = 0; i < b.length; i++)
{
if (0 == data.indexOf(b[i]))
{
data = data.substr( (b[i]).length );
ch_lotux = i.toString(16);
break;
}
}
}
}
}
else
{
break; //done
}
}
out(String.fromCharCode(parseInt(ch_str,8)) + ch_lotux);
break; //step out of the while loop
}
else if( (0x21 <= n && n <= 0x2f) || (0x3A <= n && n <= 0x40) || ( 0x5b <= n && n <= 0x60 ) || ( 0x7b <= n && n <= 0x7f ) )
{
out(data.charAt( 0 ));
data = data.substr( 1 );
match += 1;
}
}
continue;
}
}
return("no match : "+data);
break;
}
return result
}
function out(s)
{
result+=s;
}""" # 获取代码编译完成后的对象
js_dr = js2py.EvalJs()
# 执行js代码
js_dr.execute(js)
result = js_dr.jjdecode(source_text)
if 'no match :' in result:
return [0, result.strip(),'JJEncode']
return [1, result.strip(),'JJEncode']
def func_aaencode(self,encode_type,source_text):
js = """
function aadecode( text )
{
var evalPreamble = "(\uFF9F\u0414\uFF9F) ['_'] ( (\uFF9F\u0414\uFF9F) ['_'] (";
var decodePreamble = "( (\uFF9F\u0414\uFF9F) ['_'] (";
var evalPostamble = ") (\uFF9F\u0398\uFF9F)) ('_');";
var decodePostamble = ") ());";
// strip beginning/ending space.
text = text.replace(/^\s*/, "").replace(/\s*$/, "");
// returns empty text for empty input.
if (/^\s*$/.test(text)) {
return "";
}
// check if it is encoded.
if (text.lastIndexOf(evalPreamble) < 0) {
throw new Error("Given code is not encoded as aaencode.");
}
if (text.lastIndexOf(evalPostamble) != text.length - evalPostamble.length) {
throw new Error("Given code is not encoded as aaencode.");
}
var decodingScript = text.replace(evalPreamble, decodePreamble).replace(evalPostamble, decodePostamble);
return eval(decodingScript);
}""" # 获取代码编译完成后的对象
js_dr = js2py.EvalJs()
# 执行js代码
js_dr.execute(js)
result = js_dr.aadecode(source_text)
return [1, result.strip(),"AAEncode"]
def func_base16(self,encode_type,source_text):
try:
text = source_text.upper()
text = base64.b16decode(text.encode(encode_type))
result_text = str(text, encoding=encode_type)
except Exception as e:
return [0, '解码失败',"Base16"]
return [1, result_text.strip(),"Base16"]
def func_base32(self,encode_type,source_text):
try:
text = base64.b32decode(source_text.encode(encode_type))
result_text = str(text, encoding=encode_type)
except Exception as e:
return [0, '解码失败',"Base32"]
return [1, result_text.strip(),"Base32"]
def func_base36(self,encode_type,source_text):
try:
text = base36.dumps(int(source_text)) # 解密
result_text = str(text)
except Exception as e:
return [0, '解码失败',"Base36"]
return [1, result_text.strip(),"Base36"]
def func_base58(self,encode_type,source_text):
try:
result_text = base58.b58decode(source_text).decode(encode_type) # 解密
except Exception as e:
return [0, '解码失败',"Base58"]
return [1, result_text.strip(),"Base58"]
def func_base62(self,encode_type,source_text):
try:
result_text = base62.decode(source_text)
except:
return [0, '解码失败',"Base62"]
return [1, str(result_text).strip(),"Base62"]
def func_base64(self,encode_type,source_text):
try:
text = base64.b64decode(source_text.encode(encode_type))
result_text = str(text, encoding=encode_type)
except Exception as e:
return [0, '解码失败',"Base64"]
return [1, result_text.strip(),"Base64"]
def func_base64_zidingyi(self,encode_type,source_text,n):
try:
STANDARD_ALPHABET = b'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
CUSTOM_ALPHABET = n.encode()
DECODE_TRANS = bytes.maketrans(CUSTOM_ALPHABET, STANDARD_ALPHABET)
result_text = base64.b64decode((source_text.encode()).translate(DECODE_TRANS)).decode()
return [1, result_text.strip(),"Base64自定义"]
except Exception as e:
return [0, str(e),"Base64自定义"]
def func_bae85_ASCII85(self,encode_type,source_text):
try:
result_text = base64.a85decode(source_text).decode(encode_type) # 解密
except Exception as e:
return [0, '解码失败',"Base85(ASCII85)"]
return [1, result_text.strip(),"Base85(ASCII85)"]
def func_bae85_RFC1924(self,encode_type,source_text):
try:
result_text = base64.b85decode(source_text).decode(encode_type) # 解密
except Exception as e:
return [0, '解码失败',"Base85(RFC1924)"]
return [1, result_text.strip(),"Base85(RFC1924)"]
def func_base91(self,encode_type,source_text):
try:
result_text = base91.decode(source_text).decode(encode_type)
except Exception as e:
return [0, '解码失败',"Base91"]
return [1, result_text.strip(),"Base91"]
def func_base92(self,encode_type,source_text):
try:
result_text = py3base92.decode(source_text) # 解密
except Exception as e:
return [0, '解码失败',"Base92"]
return [1, result_text.strip(),"Base92"]
def func_Hex_Str(self,encode_type,source_text):
try:
text = source_text.replace('0x', '').replace('0X', '')
result_text = str(bytes.fromhex(text), encoding=encode_type)
except Exception as e:
return [0, '解码失败',"Hex->Str"]
return [1, result_text.strip(),"Hex-Str"]
def func_shellcode(self,encode_type,source_text):
try:
text = source_text.lower()
if "0x" in text and "\\x" not in text:
text = text.split('0x')
elif "\\x" in text and "0x" not in text:
text = text.split('\\x')
else:
result_text = "请输入正确的格式,如:\n\\x61\\x00\\x62\\x00\\x63\n0x610x000x620x000x63"
return [0, result_text,"Shellcode"]
result = ''
for i in text:
if i != '':
result = result + chr(int(i, 16))
result_text = result
except Exception as e:
return [0, '解码失败',"Shellcode"]
return [1, result_text.strip(),"Shellcode"]
def func_qwerty(self,encode_type,source_text):
try:
letter = {
'q': 'a', 'w': 'b', 'e': 'c', 'r': 'd', 't': 'e', 'y': 'f', 'u': 'g',
'i': 'h', 'o': 'i', 'p': 'j', 'a': 'k', 's': 'l', 'd': 'm', 'f': 'n',
'g': 'o', 'h': 'p', 'j': 'q', 'k': 'r', 'l': 's', 'z': 't',
'x': 'u', 'c': 'v', 'v': 'w', 'b': 'x', 'n': 'y', 'm': 'z',
'Q': 'A', 'W': 'B', 'E': 'C', 'R': 'D', 'T': 'E', 'Y': 'F', 'U': 'G',
'I': 'H', 'O': 'I', 'P': 'J', 'A': 'K', 'S': 'L', 'D': 'M', 'F': 'N',
'G': 'O', 'H': 'P', 'J': 'Q', 'K': 'R', 'L': 'S', 'Z': 'T',
'X': 'U', 'C': 'V', 'V': 'W', 'B': 'X', 'N': 'Y', 'M': 'Z',
}
result_text = ''
for i in range(0, len(source_text)):
if source_text[i] != ' ':
result_text = result_text + letter.get(source_text[i])
else:
result_text = result_text + ' '
except Exception as e:
return [0, '解码失败',"qwerty编码"]
return [1, result_text.strip(),"qwerty编码"]
# 核心价值观编码
def func_Socialism(sellf, encode_type, source_text):
values = '富强民主文明和谐自由平等公正法治爱国敬业诚信友善'
duo = []
for i in source_text:
num = values.index(i)
if num == -1:
continue
elif num & 1:
continue
else:
duo.append(num >> 1)
hexs = []
i = 0
while (i < len(duo)):
if duo[i] < 10:
hexs.append(duo[i])
elif duo[i] == 10:
i += 1
hexs.append(duo[i] + 10)
else:
i += 1
hexs.append(duo[i] + 6)
i += 1
res = ''.join([hex(i)[2:].upper() for i in hexs])
if len(res) == 0:
return [0, '解码失败',"核心价值观编码"]
splited = []
for i in range(len(res)):
if i & 1 == 0:
splited.append('%')
splited.append(res[i])
result = urllib.parse.unquote(''.join(splited))
return [1, result.strip(),"核心价值观编码"]
def func_jother(sellf, encode_type, source_text):
# a = Jother()
# # b =a.toStr("abcd")
# result = (a.toStr(source_text))
result = "暂不支持Jother解密但可以在浏览器按F12打开console输入密文后回车可得到解密结果"
return [0, result,"jother"]
def func_baijiaxing(sellf, encode_type, source_text):
CODE = {
"": "0", "": "1", "": "2", "": "3", "": "4", "": "5", "": "6", "": "7", "": "8", "": "9",
"": "a", "": "b", "": "c", "": "d", "": "e", "": "f", "": "g", "": "h", "": "i", "": "j",
"": "k", "": "l", "": "m", "": "n", "": "o", "": "p", "": "q", "": "r", "": "s", "": "t",
"": "u", "": "v", "": "w", "": "x", "": "y", "": "z", "": "A", "": "B", "": "C", "": "D",
"": "E", "": "F", "": "G", "": "H", "": "I", "": "J", "": "K", "": "L", "": "M", "": "N",
"": "O", "": "P", "": "Q", "": "R", "": "S", "": "T", "": "U", "": "V", "": "W", "": "X",
"": "Y", "": "Z", "": ".", "": "-", "": "_", "": "+", "": "=", "": "/", "": "?", "": "#",
"": "%", "": "&", "": "*"
}
source_text = re.sub('[^\u4e00-\u9fa5]+', '', source_text)
# source_text = source_text.replace( r"/ ^\s\s * /", '').replace( r"/\s\s *$ /", '')
cc = [CODE[i] for i in source_text]
dd = ''.join(cc)
if dd:
return [1, 'magnet:?xt=urn:btih:'+dd,"百家姓编码"]
else:
return [0, '解码失败',"百家姓编码"]

598
module/func_decrypt.py Normal file
View File

@ -0,0 +1,598 @@
# coding=utf-8
import collections
import re
import string
import base36
import base58
import base62
import base64
import base91
import html
import py3base92
import urllib.parse
import execjs
import js2py
from Crypto.Cipher import AES
from re import split
from py7zr import SevenZipFile
from io import BytesIO
class Class_Decrypt:
def func_rot5(self, encode_type, source_text):
if not bool(re.match('^[A-Za-z0-9]+$',source_text)):
return [0, 'ROT5只能对数字解密',"ROT5"]
result = ''
ascii_num = string.digits
lookup_tuple = {}
for i in range(len(ascii_num)):
lookup_tuple[ascii_num[i]] = ascii_num[i - 5]
for i in source_text:
if i not in lookup_tuple:
b = i
else:
b = lookup_tuple[i]
result += b
return [1, result.strip(),"Rot5"]
def func_rot13(self, encode_type, source_text):
if not bool(re.match('^[A-Za-z0-9]+$',source_text)):
return [0, 'Rot13只能对字母解密',"Rot13"]
try:
PAIRS = {
"a": "n", "b": "o", "c": "p", "d": "q", "e": "r",
"f": "s", "g": "t", "h": "u", "i": "v", "j": "w",
"k": "x", "l": "y", "m": "z", "n": "a", "o": "b",
"p": "c", "q": "d", "r": "e", "s": "f", "t": "g",
"u": "h", "v": "i", "w": "j", "x": "k", "y": "l",
"z": "m", "A": "N", "B": "O", "C": "P", "D": "Q",
"E": "R", "F": "S", "G": "T", "H": "U", "I": "V",
"J": "W", "K": "X", "L": "Y", "M": "Z", "N": "A",
"O": "B", "P": "C", "Q": "D", "R": "E", "S": "F",
"T": "G", "U": "H", "V": "I", "W": "J", "X": "K",
"Y": "L", "Z": "M"
}
result_text = "".join(PAIRS.get(c, c) for c in source_text)
except Exception as e:
return [0, '解密失败',"Rot13"]
return [1, result_text.strip(),"Rot13"]
# def rot13(cryptostr):
# result = ''
# ascii_case = string.ascii_lowercase
# ascii_case_up = string.ascii_uppercase
# lookup_tuple = {}
# lookup_tuple_up = {}
#
# for i in range(len(ascii_case)):
# lookup_tuple[ascii_case[i]] = ascii_case[i - 13]
# for i in range(len(ascii_case_up)):
# lookup_tuple_up[ascii_case_up[i]] = ascii_case_up[i - 13]
#
# for i in cryptostr:
# if i not in lookup_tuple and i not in lookup_tuple_up:
# b = i
# elif i in lookup_tuple:
# b = lookup_tuple[i]
# else:
# b = lookup_tuple_up[i]
# result += b
# return [1, result.strip()]
def func_rot18(self, encode_type, source_text):
rot5_ = self.func_rot5('', source_text)[1]
# print(rot5_)
result = self.func_rot13('',rot5_)
return [1, str(result[1]).strip(),"Rot18"]
def func_rot47(self, encode_type, source_text):
result = ''
for i in source_text:
if ord(i) > 126 or ord(i) < 33:
b = i
elif ord(i) >= 80:
b = chr(ord(i) - 47)
else:
b = chr(ord(i) + 47)
result += b
return [1, result.strip(),"Rot47"]
def func_kaisa(self, encode_type, source_text):
if not bool(re.match('^[A-Za-z0-9]+$',source_text)):
return [0, '凯撒密码只能对字母解密',"凯撒密码"]
try:
t = ""
for c in source_text:
if 'a' <= c <= 'z': # str是可以直接比较的
t += chr(ord('a') + ((ord(c) - ord('a')) - 3) % 26)
elif 'A' <= c <= 'Z':
t += chr(ord('A') + ((ord(c) - ord('A')) - 3) % 26)
else:
t += c
result_text = t
except Exception as e:
return [0, '解密失败',"凯撒密码"]
return [1, result_text.strip(),"凯撒密码"]
def func_zhalan(self, encode_type, source_text):
try:
result_text = ''
factors = [fac for fac in range(2, len(source_text)) if len(source_text) % fac == 0] # 取得密文长度的所有因数
for fac in factors:
flag = ''
for i in range(fac): # 按一定的步长取几组字符,并连接起来,这里组数就等于步长数
flag += source_text[i::fac]
result_text += "分为%s栏,解密结果为:%s\n" % (fac, flag)
except Exception as e:
return [0, '解密失败',"栅栏密码"]
return [1, result_text.strip(),"栅栏密码"]
def func_zhalan_w(self, encode_type, source_text):
try:
result_text = ''
for n in range(2, len(source_text)): # 遍历所有可能的栏数
# print(str(n) + '栏:' + ''.join(self.zhanlan_w_decode(text, n)[1]))
result_text += "分为%s栏,解密结果为:%s\n" % (str(n), ''.join(self.zhanlan_w_decode(source_text, n)[1]))
except Exception as e:
return [0, '解密失败',"栅栏密码(W型)"]
return [1, result_text.strip(),"栅栏密码(W型)"]
def func_peigen(self, encode_type, source_text):
try:
return_str = ''
dicts = {'aabbb': 'H', 'aabba': 'G', 'baaab': 'R', 'baaaa': 'Q', 'bbaab': 'Z', 'bbaaa': 'Y',
'abbab': 'N',
'abbaa': 'M', 'babaa': 'U', 'babab': 'V', 'abaaa': 'I', 'abaab': 'J', 'aabab': 'F',
'aabaa': 'E',
'aaaaa': 'A', 'aaaab': 'B', 'baabb': 'T', 'baaba': 'S', 'aaaba': 'C', 'aaabb': 'D',
'abbbb': 'P',
'abbba': 'O', 'ababa': 'K', 'ababb': 'L', 'babba': 'W', 'babbb': 'X'}
sums = len(source_text)
j = 5 ##每5个为一组
for i in range(int(sums / j)):
result = source_text[j * i:j * (i + 1)].lower()
return_str += str(dicts[result], )
result_text = return_str
except Exception as e:
return [0, '解密失败',"培根密码"]
return [1, result_text.strip(),"培根密码"]
def func_mosi(self, encode_type, source_text):
try:
dict = {'.-': 'A', '-...': 'B', '-.-.': 'C', '-..': 'D',
'.': 'E', '..-.': 'F', '--.': 'G', '....': 'H',
'..': 'I', '.---': 'J', '-.-': 'K', '.-..': 'L',
'--': 'M', '-.': 'N', '---': 'O', '.--.': 'P',
'--.-': 'Q', '.-.': 'R', '...': 'S', '-': 'T',
'..-': 'U', '...-': 'V', '.--': 'W', '-..-': 'X',
'-.--': 'Y', '--..': 'Z', '.----': '1', '..---': '2',
'...--': '3', '....-': '4', '.....': '5', '-....': '6',
'--...': '7', '---..': '8', '----.': '9', '-----': '0',
'..--..': '?', '-..-.': '/', '-.--.-': '()', '-....-': '-',
'.-.-.-': '.', '..--.-': '_'
}
msg = ''
if ' ' in source_text:
split_str = ' '
elif '/' in source_text:
split_str = '/'
else:
split_str = source_text.replace('.', '').replace('-', '')[0:1]
s = source_text.split(split_str)
for item in s:
if item != '' and item != ' ':
if item in dict.keys():
msg += (dict[item])
else:
msg += ("(部分解密失败:" + item + ")")
result_text = msg
except Exception as e:
return [0, '解密失败',"摩斯密码"]
return [1, result_text.strip(),"摩斯密码"]
def func_yiwei(self, encode_type, source_text):
try:
inputStr = source_text
#
result = ''
for j in range(26):
result_list = []
for i, num in zip(inputStr, range(len(inputStr))):
# print(i)
caseS1 = string.ascii_lowercase * 2
if i.islower:
caseS1 = string.ascii_lowercase * 2
if i in "ABCDEFGHIJKLMNOPQRSTUVWXYZ":
caseS1 = string.ascii_uppercase * 2
status = caseS1.find(i)
if status != -1:
result_list.append(caseS1[status + j])
else:
result_list.append(inputStr[num])
text2 = ("".join(result_list), "向右偏移了{}".format(j))
result += text2[0] + ' ' + text2[1] + '\n'
result_text = result
except Exception as e:
return [0, '解密失败',"移位密码"]
return [1, result_text.strip(),"移位密码"]
def func_yunying(self, encode_type, source_text):
try:
other_letters = []
for s in source_text:
if not ['0', '1', '2', '4', '8'].count(s):
other_letters.append(s)
if other_letters:
return [0, '加密字符串内只能包含0、1、2、4、8',"云影密码"]
else:
result_text = ''
charList = [chr(i) for i in range(ord('A'), ord('Z') + 1)]
ret = []
plaintext = [i for i in source_text.split('0')]
for i in plaintext:
tmp = 0
for j in range(len(i)):
tmp += int(i[j])
ret.append(charList[tmp - 1])
result_text = ''.join(ret)
except Exception as e:
return [0, '解密失败',"云影密码"]
return [1, result_text.strip(),"云影密码"]
def func_dangpu(self, encode_type, source_text):
try:
result_text = ''
mapping_data = {'': 0, '': 1, '': 2, '': 3, '': 4, '': 5, '': 6, '': 7, '': 8, '': 9}
for i in source_text:
if i in mapping_data.keys():
result_text += str(mapping_data[i])
else:
result_text += str(i)
except Exception as e:
return [0, '解密失败',"当铺密码"]
return [1, result_text.strip(),"当铺密码"]
def func_Polybius(self, encode_type, source_text):
Polybius_dic = {
'11': 'A', '12': 'B', '13': 'C', '14': 'D', '15': 'E', '21': 'F', '22': 'G',
'23': 'H', '24': 'I', '25': 'K', '31': 'L', '32': 'M', '33': 'N', '34': 'O',
'35': 'P', '41': 'Q', '42': 'R', '43': 'S', '44': 'T', '45': 'U', '51': 'V',
'52': 'W', '53': 'X', '54': 'Y', '55': 'Z'
}
list = re.findall(r'.{2}', source_text)
cc = [Polybius_dic[i] for i in list]
dd = ''.join(cc)
ee=''
if 'I' in dd:
ee = dd.replace('I', 'J')
result = ("{}\n{}".format(dd, ee))
return [1, result.strip(),"棋盘密码"]
def func_atbash(self, encode_type, source_text):
if not bool(re.match('^[A-Za-z]+$',source_text)):
return [0, '埃特巴什码只能对字母解密',"埃特巴什码"]
try:
str1 = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
str2 = "zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA"
result_text = ""
for s in source_text:
if s in str1:
if s != ' ':
result_text = result_text + str1[str2.index(s)]
else:
result_text = result_text + ' '
else:
result_text = result_text + s
except Exception as e:
return [0, '解密失败',"Atbash"]
return [1, result_text.strip(),"Atbash"]
def func_vigenere(self,encode_type, source_text,key):
try:
letter_list = string.ascii_uppercase
letter_list2 = string.ascii_lowercase
message =source_text.strip()
if len(key) == 0:
return [0, '请输入一个合法的key!',"维吉尼亚密码"]
key_list = []
for i in key:
key_list.append(ord(i.upper()) - 65)
plaintext = ""
flag = 0
for cipher in message:
if flag % len(key_list) == 0:
flag = 0
if cipher.isalpha():
if cipher.isupper():
plaintext += letter_list[(ord(cipher) - 65 - key_list[flag]) % 26]
flag += 1
if cipher.islower():
plaintext += letter_list2[(ord(cipher) - 97 - key_list[flag]) % 26]
flag += 1
else:
plaintext += cipher
if plaintext != '':
return [1, plaintext,"维吉尼亚密码"]
else:
return [0, '解密失败',"维吉尼亚密码"]
except Exception as e:
return [0, str(e),"维吉尼亚密码"]
def zhanlan_w_decode(self, string, n):
'''解密'''
array = self.generate_w(string, n)
sub = 0
for row in range(n): # 将w型字符按行的顺序依次替换为string
for col in range(len(string)):
if array[row][col] != '.':
array[row][col] = string[sub]
sub += 1
msg = []
for col in range(len(string)): # 以列的顺序依次连接各字符
for row in range(n):
if array[row][col] != '.':
msg.append(array[row][col])
return array, msg
def generate_w(self, string, n):
'''将字符排列成w型'''
array = [['.'] * len(string) for i in range(n)] # 生成初始矩阵
row = 0
upflag = False
for col in range(len(string)): # 在矩阵上按w型画出string
array[row][col] = string[col]
if row == n - 1:
upflag = True
if row == 0:
upflag = False
if upflag:
row -= 1
else:
row += 1
return array
def func_sifang(self,encode_type, source_text,key1,key2):
try:
text = source_text.upper()
key1 = key1.upper()
key2 = key2.upper()
matrix = "ABCDEFGHIJKLMNOPRSTUVWXYZ"
pla = "abcdefghijklmnoprstuvwxyz"
key1 = '[' + key1 + "]"
key2 = '[' + key2 + "]"
key1 = ''.join(collections.OrderedDict.fromkeys(key1))
key2 = ''.join(collections.OrderedDict.fromkeys(key2))
matrix1 = re.sub('[\[\]]', '', key1) + re.sub(key1, '', matrix)
matrix2 = re.sub('[\[\]]', '', key2) + re.sub(key2, '', matrix)
matrix_list1 = []
matrix_list2 = []
pla_list = []
# print(matrix1)
for i in range(0, len(matrix1), 5):
matrix_list1.append(list(matrix1[i:i + 5]))
for i in range(0, len(matrix2), 5):
matrix_list2.append(list(matrix2[i:i + 5]))
for i in range(0, len(pla), 5):
pla_list.append(list(pla[i:i + 5]))
cip = text.replace(' ', '')
result = ''
for i in range(0, len(cip), 2):
letter = cip[i:i + 2]
# 两个子母中第一个字母位置
first = self.find_index1(letter[0], matrix_list1)
# 两个子母中第二个字母位置
second = self.find_index2(letter[1], matrix_list2)
return_pla = ""
return_pla += pla_list[first[0]][second[1]]
return_pla += pla_list[second[0]][first[1]]
result += return_pla
if result != '':
return [1, result.strip(),"四方密码"]
else:
return [0, '解密失败',"四方密码"]
except Exception as e:
return [0, str(e),"四方密码"]
# 求逆元函数
def GetInverse(self, a, m):
for i in range(m):
if (1 == (a * i) % m):
return i
return a
def gcd(self, a, b):
if (a < b):
t = a
a = b
b = t
while (0 != b):
t = a
a = b
b = t % b
return a
def func_fangshe(self, encode_type, source_text,key1,key2):
try:
try:
if (0 == int(key1.isdigit()) or 0 == int(key2.isdigit())):
return [0, '输入有误! 密钥为数字。',"仿射密码"]
if (self.gcd(int(key1), 26) != 1):
key1_list = []
result = ''
for i in range(0, int(key1)):
if self.gcd(i, 26) == 1:
key1_list.append(i)
for z in key1_list:
result += 'key1:%s' % z + ' 明文:' + self.fangshe_getdecrypt(int(z), int(key2)) + '\n'
return [0, '输入有误! key1和26必须互素。以下为爆破key1的结果\n' + result,"仿射密码"]
else:
result = self.fangshe_getdecrypt(source_text,int(key1), int(key2))
return [1, result.strip(),"仿射密码"]
except:
return [0, '输入有误!',"仿射密码"]
except Exception as e:
return [0, str(e),"仿射密码"]
def fangshe_getdecrypt(self, source_text,key1, key2):
try:
text = source_text.strip()
letter_list = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" # 字母表
plaintext = ""
for ch in text: # 遍历密文
if ch.isalpha(): # 密文为否为字母,如果是,则判断大小写,分别进行解密
if ch.isupper():
plaintext += letter_list[self.GetInverse(key1, 26) * (ord(ch) - 65 - key2) % 26]
else:
plaintext += letter_list[self.GetInverse(key1, 26) * (ord(ch) - 97 - key2) % 26].lower()
else: # 如果密文不为字母,直接添加到明文字符串里
plaintext += ch
return plaintext
except:
return
# 查询两个密文字母位置
def find_index1(self, x, matrix_list1):
for i in range(len(matrix_list1)):
for j in range(len(matrix_list1[i])):
if matrix_list1[i][j] == x:
return i, j
def find_index2(self, y, matrix_list2):
for k in range(len(matrix_list2)):
for l in range(len(matrix_list2[k])):
if matrix_list2[k][l] == y:
return k, l
def func_yufolunchan_v1(self,encode_type,source_text):
KEY = b'XDXDtudou@KeyFansClub^_^Encode!!'
IV = b'Potato@Key@_@=_='
try:
result = self.DecryptFoYue(source_text,KEY,IV)
except:
result = self.DecryptRuShiWoWen(source_text,KEY,IV)
return [1, result.strip(),"与佛论禅1.0"]
def DecryptFoYue(self,ciphertext,KEY,IV):
BYTEMARK = ['', '', '', '', '', '', '', '', '', '', '', '']
foYue = [
'', '', '', '', '', '', '', '', '', '', '殿', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '']
ciphertext = split("[:]", ciphertext)
if len(ciphertext) > 1:
ciphertext = "".join(ciphertext[1:]).strip()
else:
ciphertext = ciphertext[0]
data = b''
i = 0
while i < len(ciphertext):
if ciphertext[i] in BYTEMARK:
i = i + 1
data = data + bytes([foYue.index(ciphertext[i]) + 128])
else:
data = data + bytes([foYue.index(ciphertext[i])])
i = i + 1
cryptor = AES.new(KEY, AES.MODE_CBC, IV)
result = cryptor.decrypt(data)
flag = result[-1]
if flag < 16 and result[-flag] == flag:
result = result[:-flag]
return result.decode('utf-16le')
def DecryptRuShiWoWen(self,ciphertext,KEY,IV):
ruShiWoWen = [
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '亿', '', '', '', '', '', '', '', '殿', '',
'', '', '', '西', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '便', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '']
ciphertext = split("[:]", ciphertext)
if len(ciphertext) > 1:
ciphertext = "".join(ciphertext[1:]).strip()
else:
ciphertext = ciphertext[0]
data = b''
for i in ciphertext:
data += bytes([ruShiWoWen.index(i)])
cryptor = AES.new(KEY, AES.MODE_CBC, IV)
fsevenZip = SevenZipFile(BytesIO(cryptor.decrypt(data)))
zipContent = fsevenZip.readall()['default'].read()
return zipContent.decode()
def func_yufolunchan_v2(sellf,encode_type,source_text,key):
CODE = {"e": "", "E": "", "t": "", "T": "",
"a": "", "A": "", "o": "", "O": "",
"i": "", "I": "", "n": "", "N": "",
"s": "", "S": "", "h": "", "H": "",
"r": "", "R": "", "d": "", "D": "",
"l": "", "L": "", "c": "", "C": "",
"u": "", "U": "", "m": "", "M": "",
"w": "", "W": "", "f": "", "F": "",
"g": "", "G": "", "y": "", "Y": "", "p": "",
"P": "", "b": "", "B": "", "v": "",
"V": "", "k": "", "K": "", "j": "",
"J": "", "x": "", "X": "", "q": "",
"Q": "", "z": "", "Z": "", "0": "",
"1": "", "2": "", "3": "", "4": "",
"5": "", "6": "", "7": "", "8": "",
"9": "", "+": "", "/": "", "=": "",
}
CODE = dict((value, key) for key, value in CODE.items())
if len(source_text)<1:
return [0,"无言者,纵真神再临,亦不可渡。(请输入待解密的密文)","与佛论禅2.0"]
elif source_text[0:4] !="佛又曰:" and source_text[0:3] !="佛曰:" :
return [0,"施主可曾记得此为何高僧所言?(不是佛语,请确定密文来源本网站并且密文以“佛曰:”或“佛又曰:”开头”)","与佛论禅2.0"]
else:
source_text = source_text.replace("佛又曰:","").replace("佛曰:","")
msg = ''
for char in source_text:
if char in CODE:
if char == ' ':
pass
else:
msg += (CODE[char])
else:
msg = '文本中含有不能识别的字符!'
try:
f = open('./module/yufoluntan_main.js', 'r')
jsf_code = f.read()
js = execjs.get()
# print(jsf_code)
# print "Using Engine %s" % js.name
jsf_int = js.compile(jsf_code)
return_text = jsf_int.call("aes_decrypto", msg, key)
return [1, return_text,"与佛论禅2.0"]
except Exception as e:
return [0, str(e),"与佛论禅2.0"]
def func_a1z26(self, encode_type, source_text):
str1 = string.ascii_lowercase
res = source_text.split("-")
result = ""
for i in res:
result += str1[int(i) - 1]
return [1, result.strip(),"A1z26密码"]

704
module/func_encode.py Normal file
View File

@ -0,0 +1,704 @@
# coding=utf-8
import re
from random import random
from module.jother import Jother
import base36
import base58
import base62
import base64
import base91
import html
import py3base92
import urllib.parse
import execjs
import js2py
class Class_Encode:
def func_url(self, encode_type, source_text):
text = source_text.encode(encode_type)
result_text = urllib.parse.quote(text)
return [1, result_text,"Url"]
def func_unicode(self, encode_type, source_text):
text = source_text.encode('unicode_escape')
result_text = str(text, encoding=encode_type)
return [1, result_text,"Unicode"]
def func_escape_u(self, encode_type, source_text):
text = source_text.encode('unicode_escape')
result_text = str(text, encoding=encode_type).replace('\\u', '%u')
return [1, result_text,"Escape_u"]
def func_html(self, encode_type, source_text):
result_text = html.escape(source_text)
return [1, result_text,"html"]
def func_ASCII_2(self, encode_type, source_text):
result = ''
for i in source_text:
s = int(ord(str(i)))
re = str(bin(s)).replace('0b', '')
result += str(re) + ' '
result_text = str(result)
return [1, result_text.strip(),"ASCII(2进制)"]
def func_ASCII_8(self, encode_type, source_text):
result = ''
for i in source_text:
s = int(ord(str(i)))
re = str(oct(s)).replace('0o', '')
result += str(re) + ' '
result_text = str(result)
return [1, result_text.strip(),"ASCII(8进制)"]
def func_ASCII_10(self, encode_type, source_text):
result = ''
for i in source_text:
result = str(result) + str(ord(str(i))) + ' '
result_text = str(result)
return [1, result_text.strip(),"ASCII(10进制)"]
def func_ASCII_16(self, encode_type, source_text):
result = ''
for i in source_text:
s = int(ord(str(i)))
re = str(hex(s)).replace('0x', '')
result += str(re) + ' '
result_text = str(result)
return [1, result_text.strip(),"ASCII(16进制)"]
def func_base16(self, encode_type, source_text):
text = source_text.lower()
text = base64.b16encode(text.encode(encode_type))
result_text = str(text, encoding=encode_type)
return [1, result_text,"Base16"]
def func_base32(self, encode_type, source_text):
text = base64.b32encode(source_text.encode(encode_type))
result_text = str(text, encoding=encode_type)
return [1, result_text,"Base32"]
def func_base36(self, encode_type, source_text):
result_text = str(base36.loads(source_text))
return [1, result_text,"Base36"]
def func_base58(self, encode_type, source_text):
result_text = base58.b58encode(source_text.encode(encode_type)).decode() # 加密
return [1, result_text,"Base58"]
def func_base62(self, encode_type, source_text):
try:
text = base62.encode(int(source_text))
except:
return [0, 'base62只能对数字编码',"Base62"]
# print(text)
# result_text = str(text, encoding='utf-8')
return [1, text,"Base62"]
def func_base64(self, encode_type, source_text):
text = base64.b64encode(source_text.encode(encode_type))
result_text = str(text, encoding=encode_type)
return [1, result_text,"Base64"]
def func_base64_zidingyi(self, encode_type, source_text, n):
try:
STANDARD_ALPHABET = b'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
CUSTOM_ALPHABET = n.encode(encode_type)
encode_typeTRANS = bytes.maketrans(STANDARD_ALPHABET, CUSTOM_ALPHABET)
result_text = base64.b64encode(source_text.encode(encode_type)).translate(encode_typeTRANS).decode()
return [1, result_text,"Base64(自定义)"]
except Exception as e:
return [0, str(e),"Base64(自定义)"]
def func_bae85_ASCII85(self, encode_type, source_text):
result_text = base64.a85encode(source_text.encode(encode_type)).decode(encode_type) # 加密
return [1, result_text,"Base85(ASCII85)"]
def func_bae85_RFC1924(self, encode_type, source_text):
result_text = base64.b85encode(source_text.encode(encode_type)).decode() # 加密
return [1, result_text,"Base85(RFC1924)"]
def func_base91(self, encode_type, source_text):
result_text = base91.encode(source_text.encode(encode_type)) #
return [1, result_text,"Base91"]
def func_base92(self, encode_type, source_text):
result_text = py3base92.encode(source_text)
return [1, result_text,"Base92"]
def func_Str_Hex(self, encode_type, source_text):
result = ''
for i in source_text:
single = str(hex(ord(str(i))))
result = result + single
result_text = (str(result)).replace('0x', '')
return [1, result_text,"Str->Hex"]
def func_shellcode(self, encode_type, source_text):
result = ''
for i in source_text:
single = str(hex(ord(str(i))))
result = result + single
result_text = (str(result)).replace('0x', '\\x')
return [1, result_text,"Shellcode"]
def func_qwerty(self, encode_type, source_text):
str1 = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM"
str2 = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
result_text = ""
for s in source_text:
if s in str1:
if s != ' ':
result_text = result_text + str1[str2.index(s)]
else:
result_text = result_text + ' '
else:
return [1, 'Qwerty只能对字母加密!', "Qwerty密码"]
return [1, result_text,"Qwerty密码"]
# print(str(e))
def func_jsfuck(self, encode_type, source_text):
ctx = execjs.compile("""
/*! JSFuck 0.4.0 - http://jsfuck.com */
function JSFuck(code){
var USE_CHAR_CODE = "USE_CHAR_CODE";
var MIN = 32, MAX = 126;
var SIMPLE = {
'false': '![]',
'true': '!![]',
'undefined': '[][[]]',
'NaN': '+[![]]',
'Infinity': '+(+!+[]+(!+[]+[])[!+[]+!+[]+!+[]]+[+!+[]]+[+[]]+[+[]]+[+[]])' // +"1e1000"
};
var CONSTRUCTORS = {
'Array': '[]',
'Number': '(+[])',
'String': '([]+[])',
'Boolean': '(![])',
'Function': '[]["fill"]',
'RegExp': 'Function("return/"+false+"/")()'
};
var MAPPING = {
'a': '(false+"")[1]',
'b': '([]["entries"]()+"")[2]',
'c': '([]["fill"]+"")[3]',
'd': '(undefined+"")[2]',
'e': '(true+"")[3]',
'f': '(false+"")[0]',
'g': '(false+[0]+String)[20]',
'h': '(+(101))["to"+String["name"]](21)[1]',
'i': '([false]+undefined)[10]',
'j': '([]["entries"]()+"")[3]',
'k': '(+(20))["to"+String["name"]](21)',
'l': '(false+"")[2]',
'm': '(Number+"")[11]',
'n': '(undefined+"")[1]',
'o': '(true+[]["fill"])[10]',
'p': '(+(211))["to"+String["name"]](31)[1]',
'q': '(+(212))["to"+String["name"]](31)[1]',
'r': '(true+"")[1]',
's': '(false+"")[3]',
't': '(true+"")[0]',
'u': '(undefined+"")[0]',
'v': '(+(31))["to"+String["name"]](32)',
'w': '(+(32))["to"+String["name"]](33)',
'x': '(+(101))["to"+String["name"]](34)[1]',
'y': '(NaN+[Infinity])[10]',
'z': '(+(35))["to"+String["name"]](36)',
'A': '(+[]+Array)[10]',
'B': '(+[]+Boolean)[10]',
'C': 'Function("return escape")()(("")["italics"]())[2]',
'D': 'Function("return escape")()([]["fill"])["slice"]("-1")',
'E': '(RegExp+"")[12]',
'F': '(+[]+Function)[10]',
'G': '(false+Function("return Date")()())[30]',
'H': USE_CHAR_CODE,
'I': '(Infinity+"")[0]',
'J': USE_CHAR_CODE,
'K': USE_CHAR_CODE,
'L': USE_CHAR_CODE,
'M': '(true+Function("return Date")()())[30]',
'N': '(NaN+"")[0]',
'O': '(NaN+Function("return{}")())[11]',
'P': USE_CHAR_CODE,
'Q': USE_CHAR_CODE,
'R': '(+[]+RegExp)[10]',
'S': '(+[]+String)[10]',
'T': '(NaN+Function("return Date")()())[30]',
'U': '(NaN+Function("return{}")()["to"+String["name"]]["call"]())[11]',
'V': USE_CHAR_CODE,
'W': USE_CHAR_CODE,
'X': USE_CHAR_CODE,
'Y': USE_CHAR_CODE,
'Z': USE_CHAR_CODE,
' ': '(NaN+[]["fill"])[11]',
'!': USE_CHAR_CODE,
'"': '("")["fontcolor"]()[12]',
'#': USE_CHAR_CODE,
'$': USE_CHAR_CODE,
'%': 'Function("return escape")()([]["fill"])[21]',
'&': '("")["link"](0+")[10]',
'\\'': USE_CHAR_CODE,
'(': '(undefined+[]["fill"])[22]',
')': '([0]+false+[]["fill"])[20]',
'*': USE_CHAR_CODE,
'+': '(+(+!+[]+(!+[]+[])[!+[]+!+[]+!+[]]+[+!+[]]+[+[]]+[+[]])+[])[2]',
',': '([]["slice"]["call"](false+"")+"")[1]',
'-': '(+(.+[0000000001])+"")[2]',
'.': '(+(+!+[]+[+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+[!+[]+!+[]]+[+[]])+[])[+!+[]]',
'/': '(false+[0])["italics"]()[10]',
':': '(RegExp()+"")[3]',
';': '("")["link"](")[14]',
'<': '("")["italics"]()[0]',
'=': '("")["fontcolor"]()[11]',
'>': '("")["italics"]()[2]',
'?': '(RegExp()+"")[2]',
'@': USE_CHAR_CODE,
'[': '([]["entries"]()+"")[0]',
'\\\\': USE_CHAR_CODE,
']': '([]["entries"]()+"")[22]',
'^': USE_CHAR_CODE,
'_': USE_CHAR_CODE,
'`': USE_CHAR_CODE,
'{': '(true+[]["fill"])[20]',
'|': USE_CHAR_CODE,
'}': '([]["fill"]+"")["slice"]("-1")',
'~': USE_CHAR_CODE
};
var GLOBAL = 'Function("return this")()';
function fillMissingChars(){
for (var key in MAPPING){
if (MAPPING[key] === USE_CHAR_CODE){
MAPPING[key] = 'Function("return unescape")()("%"'+ key.charCodeAt(0).toString(16).replace(/(\\d+)/g, "+($1)+\\"") + '")';
}
}
}
function fillMissingDigits(){
var output, number, i;
for (number = 0; number < 10; number++){
output = "+[]";
if (number > 0){ output = "+!" + output; }
for (i = 1; i < number; i++){ output = "+!+[]" + output; }
if (number > 1){ output = output.substr(1); }
MAPPING[number] = "[" + output + "]";
}
}
function replaceMap(){
var character = "", value, original, i, key;
function replace(pattern, replacement){
value = value.replace(
new RegExp(pattern, "gi"),
replacement
);
}
function digitReplacer(_,x) { return MAPPING[x]; }
function numberReplacer(_,y) {
var values = y.split("");
var head = +(values.shift());
var output = "+[]";
if (head > 0){ output = "+!" + output; }
for (i = 1; i < head; i++){ output = "+!+[]" + output; }
if (head > 1){ output = output.substr(1); }
return [output].concat(values).join("+").replace(/(\\d)/g, digitReplacer);
}
for (i = MIN; i <= MAX; i++){
character = String.fromCharCode(i);
value = MAPPING[character];
if(!value) {continue;}
original = value;
for (key in CONSTRUCTORS){
replace("\\\\b" + key, CONSTRUCTORS[key] + '["constructor"]');
}
for (key in SIMPLE){
replace(key, SIMPLE[key]);
}
replace('(\\\\d\\\\d+)', numberReplacer);
replace('\\\\((\\\\d)\\\\)', digitReplacer);
replace('\\\\[(\\\\d)\\\\]', digitReplacer);
replace("GLOBAL", GLOBAL);
replace('\\\\+""', "+[]");
replace('""', "[]+[]");
MAPPING[character] = value;
}
}
function replaceStrings(){
var regEx = /[^\\[\\]\\(\\)\\!\\+]{1}/g,
all, value, missing,
count = MAX - MIN;
function findMissing(){
var all, value, done = false;
missing = {};
for (all in MAPPING){
value = MAPPING[all];
if (value.match(regEx)){
missing[all] = value;
done = true;
}
}
return done;
}
function mappingReplacer(a, b) {
return b.split("").join("+");
}
function valueReplacer(c) {
return missing[c] ? c : MAPPING[c];
}
for (all in MAPPING){
MAPPING[all] = MAPPING[all].replace(/\\"([^\\"]+)\\"/gi, mappingReplacer);
}
while (findMissing()){
for (all in missing){
value = MAPPING[all];
value = value.replace(regEx, valueReplacer);
MAPPING[all] = value;
missing[all] = value;
}
if (count-- === 0){
console.error("Could not compile the following chars:", missing);
}
}
}
function encode(input, wrapWithEval, runInParentScope){
var output = [];
if (!input){
return "";
}
var r = "";
for (var i in SIMPLE) {
r += i + "|";
}
r+=".";
input.replace(new RegExp(r, 'g'), function(c) {
var replacement = SIMPLE[c];
if (replacement) {
output.push("[" + replacement + "]+[]");
} else {
replacement = MAPPING[c];
if (replacement){
output.push(replacement);
} else {
replacement =
"([]+[])[" + encode("constructor") + "]" +
"[" + encode("fromCharCode") + "]" +
"(" + encode(c.charCodeAt(0) + "") + ")";
output.push(replacement);
MAPPING[c] = replacement;
}
}
});
output = output.join("+");
if (/^\\d$/.test(input)){
output += "+[]";
}
if (wrapWithEval){
if (runInParentScope){
output = "[][" + encode("fill") + "]" +
"[" + encode("constructor") + "]" +
"(" + encode("return eval") + ")()" +
"(" + output + ")";
} else {
output = "[][" + encode("fill") + "]" +
"[" + encode("constructor") + "]" +
"(" + output + ")()";
}
}
return output;
}
fillMissingDigits();
fillMissingChars();
replaceMap();
replaceStrings();
var js_fuck_payload = encode(code,1);
return js_fuck_payload;
};
""") # 获取代码编译完成后的对象
result = ctx.call("JSFuck", source_text, '1')
return [1, result,"Jsfuck"]
# f = open('./module/jsfuck.js', 'r')
# jsf_code = f.read()
# js = execjs.get()
# # print(jsf_code)
# # print "Using Engine %s" % js.name
# jsf_int = js.compile(jsf_code)
# return_text = jsf_int.call("JSFuck", text, '1')
# return(return_text)
def func_jjencode(self, encode_type, source_text):
js = """
function keyup( t )
{
var _prev;
var v = "$";
var p = false;
var r;
if( _prev != ( t + "\\0" + v + "\\0" + p ) || true ){
r = jjencode( v, t );
if( p ){
r = r.replace( /[,;]$/, "" );
r = "\\"\\'\\\\\\"+\\'+\\"," + r + ",\\'," + r.split("").reverse().join("") +",\\"+\\'+\\"\\\\\\'\\"";
}
return r
}
}
function jjencode( gv, text )
{
var r="";
var n;
var t;
var b=[ "___", "__$", "_$_", "_$$", "$__", "$_$", "$$_", "$$$", "$___", "$__$", "$_$_", "$_$$", "$$__", "$$_$", "$$$_", "$$$$", ];
var s = "";
for( var i = 0; i < text.length; i++ ){
n = text.charCodeAt( i );
if( n == 0x22 || n == 0x5c ){
s += "\\\\\\\\\\\\" + text.charAt( i ).toString(16);
}else if( (0x21 <= n && n <= 0x2f) || (0x3A <= n && n <= 0x40) || ( 0x5b <= n && n <= 0x60 ) || ( 0x7b <= n && n <= 0x7f ) ){
//}else if( (0x20 <= n && n <= 0x2f) || (0x3A <= n == 0x40) || ( 0x5b <= n && n <= 0x60 ) || ( 0x7b <= n && n <= 0x7f ) ){
s += text.charAt( i );
}else if( (0x30 <= n && n <= 0x39 ) || (0x61 <= n && n <= 0x66 ) ){
if( s ) r += "\\"" + s +"\\"+";
r += gv + "." + b[ n < 0x40 ? n - 0x30 : n - 0x57 ] + "+";
s="";
}else if( n == 0x6c ){ // 'l'
if( s ) r += "\\"" + s + "\\"+";
r += "(![]+\\"\\")[" + gv + "._$_]+";
s = "";
}else if( n == 0x6f ){ // 'o'
if( s ) r += "\\"" + s + "\\"+";
r += gv + "._$+";
s = "";
}else if( n == 0x74 ){ // 'u'
if( s ) r += "\\"" + s + "\\"+";
r += gv + ".__+";
s = "";
}else if( n == 0x75 ){ // 'u'
if( s ) r += "\\"" + s + "\\"+";
r += gv + "._+";
s = "";
}else if( n < 128 ){
if( s ) r += "\\"" + s;
else r += "\\"";
r += "\\\\\\\\\\"+" + n.toString( 8 ).replace( /[0-7]/g, function(c){ return gv + "."+b[ c ]+"+" } );
s = "";
}else{
if( s ) r += "\\"" + s;
else r += "\\"";
r += "\\\\\\\\\\"+" + gv + "._+" + n.toString(16).replace( /[0-9a-f]/gi, function(c){ return gv + "."+b[parseInt(c,16)]+"+"} );
s = "";
}
}
if( s ) r += "\\"" + s + "\\"+";
r =
gv + "=~[];" +
gv + "={___:++" + gv +",$$$$:(![]+\\"\\")["+gv+"],__$:++"+gv+",$_$_:(![]+\\"\\")["+gv+"],_$_:++"+
gv+",$_$$:({}+\\"\\")["+gv+"],$$_$:("+gv+"["+gv+"]+\\"\\")["+gv+"],_$$:++"+gv+",$$$_:(!\\"\\"+\\"\\")["+
gv+"],$__:++"+gv+",$_$:++"+gv+",$$__:({}+\\"\\")["+gv+"],$$_:++"+gv+",$$$:++"+gv+",$___:++"+gv+",$__$:++"+gv+"};"+
gv+".$_="+
"("+gv+".$_="+gv+"+\\"\\")["+gv+".$_$]+"+
"("+gv+"._$="+gv+".$_["+gv+".__$])+"+
"("+gv+".$$=("+gv+".$+\\"\\")["+gv+".__$])+"+
"((!"+gv+")+\\"\\")["+gv+"._$$]+"+
"("+gv+".__="+gv+".$_["+gv+".$$_])+"+
"("+gv+".$=(!\\"\\"+\\"\\")["+gv+".__$])+"+
"("+gv+"._=(!\\"\\"+\\"\\")["+gv+"._$_])+"+
gv+".$_["+gv+".$_$]+"+
gv+".__+"+
gv+"._$+"+
gv+".$;"+
gv+".$$="+
gv+".$+"+
"(!\\"\\"+\\"\\")["+gv+"._$$]+"+
gv+".__+"+
gv+"._+"+
gv+".$+"+
gv+".$$;"+
gv+".$=("+gv+".___)["+gv+".$_]["+gv+".$_];"+
gv+".$("+gv+".$("+gv+".$$+\\"\\\\\\"\\"+" + r + "\\"\\\\\\"\\")())();";
return r;
}""" # 获取代码编译完成后的对象
js_dr = js2py.EvalJs()
# 执行js代码
js_dr.execute(js)
result = js_dr.keyup(source_text)
return [1, result,"JJEncode"]
def func_aaencode(self, encode_type, source_text):
js = """
function aaencode( text )
{
var t;
var b = [
"(c^_^o)",
"(゚Θ゚)",
"((o^_^o) - (゚Θ゚))",
"(o^_^o)",
"(゚ー゚)",
"((゚ー゚) + (゚Θ゚))",
"((o^_^o) +(o^_^o))",
"((゚ー゚) + (o^_^o))",
"((゚ー゚) + (゚ー゚))",
"((゚ー゚) + (゚ー゚) + (゚Θ゚))",
"(゚Д゚) .゚ω゚ノ",
"(゚Д゚) .゚Θ゚ノ",
"(゚Д゚) ['c']",
"(゚Д゚) .゚ー゚ノ",
"(゚Д゚) .゚Д゚ノ",
"(゚Д゚) [゚Θ゚]"
];
var r = "゚ω゚ノ= /`m´)ノ ~┻━┻ //*´∇`*/ ['_']; o=(゚ー゚) =_=3; c=(゚Θ゚) =(゚ー゚)-(゚ー゚); ";
if( /ひだまりスケッチ×(365|)\\s*来週も見てくださいね[!]/.test( text ) ){
r += "X=_=3; ";
r += "\\r\\n\\r\\n X / _ / X < \\"来週も見てくださいね!\\";\\r\\n\\r\\n";
}
r += "(゚Д゚) =(゚Θ゚)= (o^_^o)/ (o^_^o);"+
"(゚Д゚)={゚Θ゚: '_' ,゚ω゚ノ : ((゚ω゚ノ==3) +'_') [゚Θ゚] "+
",゚ー゚ノ :(゚ω゚ノ+ '_')[o^_^o -(゚Θ゚)] "+
",゚Д゚ノ:((゚ー゚==3) +'_')[゚ー゚] }; (゚Д゚) [゚Θ゚] =((゚ω゚ノ==3) +'_') [c^_^o];"+
"(゚Д゚) ['c'] = ((゚Д゚)+'_') [ (゚ー゚)+(゚ー゚)-(゚Θ゚) ];"+
"(゚Д゚) ['o'] = ((゚Д゚)+'_') [゚Θ゚];"+
"(゚o゚)=(゚Д゚) ['c']+(゚Д゚) ['o']+(゚ω゚ノ +'_')[゚Θ゚]+ ((゚ω゚ノ==3) +'_') [゚ー゚] + "+
"((゚Д゚) +'_') [(゚ー゚)+(゚ー゚)]+ ((゚ー゚==3) +'_') [゚Θ゚]+"+
"((゚ー゚==3) +'_') [(゚ー゚) - (゚Θ゚)]+(゚Д゚) ['c']+"+
"((゚Д゚)+'_') [(゚ー゚)+(゚ー゚)]+ (゚Д゚) ['o']+"+
"((゚ー゚==3) +'_') [゚Θ゚];(゚Д゚) ['_'] =(o^_^o) [゚o゚] [゚o゚];"+
"(゚ε゚)=((゚ー゚==3) +'_') [゚Θ゚]+ (゚Д゚) .゚Д゚ノ+"+
"((゚Д゚)+'_') [(゚ー゚) + (゚ー゚)]+((゚ー゚==3) +'_') [o^_^o -゚Θ゚]+"+
"((゚ー゚==3) +'_') [゚Θ゚]+ (゚ω゚ノ +'_') [゚Θ゚]; "+
"(゚ー゚)+=(゚Θ゚); (゚Д゚)[゚ε゚]='\\\\\\\\'; "+
"(゚Д゚).゚Θ゚ノ=(゚Д゚+ ゚ー゚)[o^_^o -(゚Θ゚)];"+
"(o゚ー゚o)=(゚ω゚ノ +'_')[c^_^o];"+//TODO
"(゚Д゚) [゚o゚]='\\\\\\"';"+
"(゚Д゚) ['_'] ( (゚Д゚) ['_'] (゚ε゚+";
r += "(゚Д゚)[゚o゚]+ ";
for( var i = 0; i < text.length; i++ ){
n = text.charCodeAt( i );
t = "(゚Д゚)[゚ε゚]+";
if( n <= 127 ){
t += n.toString( 8 ).replace( /[0-7]/g, function(c){ return b[ c ] + "+ "; } );
}else{
var m = /[0-9a-f]{4}$/.exec( "000" + n.toString(16 ) )[0];
t += "(o゚ー゚o)+ " + m.replace( /[0-9a-f]/gi, function(c){ return b[ parseInt( c,16 ) ] + "+ "; } );
}
r += t;
}
r += "(゚Д゚)[゚o゚]) (゚Θ゚)) ('_');";
return r;
}"""
js_dr = js2py.EvalJs()
# 执行js代码
js_dr.execute(js)
result = js_dr.aaencode(source_text)
return [1, result,"AAEncode"]
def func_Socialism(self, encode_type, source_text):
values = '富强民主文明和谐自由平等公正法治爱国敬业诚信友善'
strs = "0123456789ABCDEF"
pattern = re.compile(r"[A-Za-z0-9\-\_\.\!\~\*\'\(\)]")
str1 = ''
for i in source_text:
if pattern.match(i) == None:
str1 += urllib.parse.quote(i.encode())
else:
str1 += hex(ord(i))[2:]
concated = str1.replace('%', '').upper()
duo = []
for i in concated:
n = strs.index(i)
if n < 10:
duo.append(n)
elif random() >= 0.5:
duo.append(10)
duo.append(n - 10)
else:
duo.append(11)
duo.append(n - 6)
result = ''.join([values[2 * i] + values[2 * i + 1] for i in duo])
return [1, result,"核心价值观编码"]
def func_jother(sellf, encode_type, source_text):
a = Jother()
result = (a.toScript(source_text))
return [1, result,"Jother"]
def func_baijiaxing(sellf, encode_type, source_text):
CODE = {
"": "0", "": "1", "": "2", "": "3", "": "4", "": "5", "": "6", "": "7", "": "8", "": "9",
"": "a", "": "b", "": "c", "": "d", "": "e", "": "f", "": "g", "": "h", "": "i", "": "j",
"": "k", "": "l", "": "m", "": "n", "": "o", "": "p", "": "q", "": "r", "": "s", "": "t",
"": "u", "": "v", "": "w", "": "x", "": "y", "": "z", "": "A", "": "B", "": "C", "": "D",
"": "E", "": "F", "": "G", "": "H", "": "I", "": "J", "": "K", "": "L", "": "M", "": "N",
"": "O", "": "P", "": "Q", "": "R", "": "S", "": "T", "": "U", "": "V", "": "W", "": "X",
"": "Y", "": "Z", "": ".", "": "-", "": "_", "": "+", "": "=", "": "/", "": "?", "": "#",
"": "%", "": "&", "": "*"
}
source_text = re.sub('[\u4e00-\u9fa5]', '', source_text)
# source_text = source_text.replace( r"/ ^\s\s * /", '').replace( r"/\s\s *$ /", '')
CODE = dict((value, key) for key, value in CODE.items())
cc = [CODE[i] for i in source_text]
dd = ''.join(cc)
return [1, dd,"百家姓编码"]

437
module/func_encrypt.py Normal file
View File

@ -0,0 +1,437 @@
# coding=utf-8
import collections
import random
import re
import string
import base36
import base58
import base62
import base64
import base91
import html
import py3base92
import urllib.parse
import execjs
import js2py
from Crypto.Cipher import AES
class Class_Encrypt:
def func_rot13(self, encode_type, source_text):
d = {chr(i + c): chr((i + 13) % 26 + c) for i in range(26) for c in (65, 97)}
result_text = ''.join([d.get(c, c) for c in source_text])
return [1, result_text,"Rot13"]
def func_kaisa(self, encode_type, source_text):
t = ""
for c in source_text:
if 'a' <= c <= 'z': # str是可以直接比较的
t += chr(ord('a') + ((ord(c) - ord('a')) + 3) % 26)
elif 'A' <= c <= 'Z':
t += chr(ord('A') + ((ord(c) - ord('A')) + 3) % 26)
else:
t += c
result_text = t
return [1, result_text,"凯撒密码"]
def func_peigen(self, encode_type, source_text):
CODE_TABLE = { # 培根字典
'aaaaa': 'a', 'aaaab': 'b', 'aaaba': 'c', 'aaabb': 'd', 'aabaa': 'e', 'aabab': 'f', 'aabba': 'g',
'aabbb': 'h', 'abaaa': 'i', 'abaab': 'j', 'ababa': 'k', 'ababb': 'l', 'abbaa': 'm', 'abbab': 'n',
'abbba': 'o', 'abbbb': 'p', 'baaaa': 'q', 'baaab': 'r', 'baaba': 's', 'baabb': 't', 'babaa': 'u',
'babab': 'v', 'babba': 'w', 'babbb': 'x', 'bbaaa': 'y', 'bbaab': 'z'
}
str = source_text.lower()
listStr = ''
for i in str:
if i in CODE_TABLE.values():
# 将键、值各化为一个列表取出i在value的位置后根据下标找到对应的键
listStr += list(CODE_TABLE.keys())[list(CODE_TABLE.values()).index(i)]
result_text = listStr.upper() # 大写输出
return [1, result_text,"培根密码"]
def func_mosi(self, encode_type, source_text):
CODE = {'A': '.-', 'B': '-...', 'C': '-.-.',
'D': '-..', 'E': '.', 'F': '..-.',
'G': '--.', 'H': '....', 'I': '..',
'J': '.---', 'K': '-.-', 'L': '.-..',
'M': '--', 'N': '-.', 'O': '---',
'P': '.--.', 'Q': '--.-', 'R': '.-.',
'S': '...', 'T': '-', 'U': '..-',
'V': '...-', 'W': '.--', 'X': '-..-',
'Y': '-.--', 'Z': '--..',
'0': '-----', '1': '.----', '2': '..---',
'3': '...--', '4': '....-', '5': '.....',
'6': '-....', '7': '--...', '8': '---..',
'9': '----.', '?': '..--..', '/': '-..-.',
'()': '-.--.-', '-': '-....-', '.': '.-.-.-'
}
msg = ''
for char in source_text.upper():
if char in CODE:
if char == ' ':
pass
else:
msg += (CODE[char.upper()] + ' ')
else:
return [0, '文本中含有不能识别的字符!',"摩斯密码"]
result_text = msg
return [1, result_text,"摩斯密码"]
def func_yunying(self, encode_type, source_text):
charList = [chr(i) for i in range(ord('A'), ord('Z') + 1)]
cipher = [i for i in source_text.upper()]
tmp = []
ret = []
for i in range(len(cipher)):
for j in range(len(charList)):
if charList[j] == cipher[i]:
tmp.append(j + 1)
for i in tmp:
res = ''
if i >= 8:
for j in range(0, int(i / 8)):
res += '8'
if i % 8 >= 4:
for j in range(0, int(i % 8 / 4)):
res += '4'
if i % 4 >= 2:
for j in range(0, int(i % 4 / 2)):
res += '2'
if i % 2 >= 1:
for j in range(0, int(i % 2 / 1)):
res += '1'
ret.append(res + '0')
result_text = ''.join(ret)[:-1]
return [1, result_text,"云影密码"]
def func_dangpu(self, encode_type, source_text):
mapping_data = [[''], [''], [''], [''], [''], [''], [''], [''], [''], ['']]
try:
result = []
for c in source_text:
c_list = mapping_data[int(c)]
c_index = random.randint(0, len(c_list) - 1)
result.append(c_list[c_index])
result_text = ''.join(result)
except:
return [0, '未找到该字符串对应的中文!',"当铺密码"]
return [1, result_text,"当铺密码"]
# def yufolunchan_v1(sellf, encode_type, source_text):
# BYTEMARK = ['冥', '奢', '梵', '呐', '俱', '哆', '怯', '諳', '罰', '侄', '缽', '皤']
# KEY = b'XDXDtudou@KeyFansClub^_^Encode!!'
# IV = b'Potato@Key@_@=_='
# padding = lambda s: s + (16 - len(s) % 16) * chr(16 - len(s) % 16)
# cryptor = AES.new(KEY, AES.MODE_CBC, IV)
# result = cryptor.encrypt(padding(source_text).encode("utf-8"))
# aes_result = base64.b64encode(result).decode("utf-8")
# print(aes_result)
# truth_table = [
# '东', '殺', '諦', '曰', '至', '住', '藥', '忧', '蒙', '迦', '焰', '度', '謹', '妙', '智', '皂',
# '药', '經', '牟', '麼', '在', '孝', '界', '诵', '婦', '弟', '蘇', '竟', '德', '粟', '路', '茶',
# '栗', '特', '孤', '排', '西', '经', '慈', '行', '游', '訶', '難', '六', '精', '未', '輸', '楞',
# '去', '寂', '盧', '过', '故', '金', '安', '羅', '參', '吼', '橋', '央', '即', '曳', '消', '閦',
# '倒', '造', '稳', '戒', '藐', '親', '數', '普', '中', '朋', '释', '闍', '解', '夢', '鄉', '五',
# '诸', '守', '刚', '彌', '名', '陰', '足', '劫', '帝', '清', '勒', '時', '伊', '求', '戏', '功',
# '月', '除', '便', '贤', '宗', '灯', '夫', '者', '毒', '敬', '憐', '室', '号', '信', '姪', '灭',
# '以', '通', '方', '遮', '穆', '亿', '百', '昼', '睦', '貧', '殊', '说', '積', '高', '利', '沙',
# '僧', '奉', '花', '遠', '他', '亦', '孕', '心', '資', '福', '璃', '毘', '矜', '夷', '惜', '顛',
# '藝', '文', '急', '恤', '令', '阿', '放', '涅', '和', '告', '老', '怖', '山', '尼', '舍', '孫',
# '濟', '琉', '雙', '进', '廣', '想', '施', '師', '礙', '多', '休', '逝', '印', '愛', '友', '薩',
# '先', '槃', '持', '提', '真', '乾', '幽', '此', '尊', '重', '究', '三', '兄', '北', '陵', '瑟',
# '树', '紛', '哈', '善', '捐', '须', '胜', '隸', '困', '依', '創', '陀', '修', '万', '捨', '族',
# '来', '死', '根', '實', '夜', '拔', '首', '虚', '量', '呼', '师', '耨', '祖', '豆', '下', '各',
# '寡', '息', '知', '于', '千', '醯', '殿', '定', '禮', '如', '廟', '王', '数', '宇', '众', '恐',
# '盡', '能', '七', '寫', '弥', '宝', '梭', '害', '生', '及', '开', '空', '教', '念', '凉', '护',
# '色', '命', '乖', '岚',
# ]
# alpha_dict = {
# '+': 0, '/': 4, '0': 8, '1': 12, '2': 16, '3': 20, '4': 24, '5': 28,
# '6': 32, '7': 36, '8': 40, '9': 44, 'A': 48, 'B': 52, 'C': 56, 'D': 60,
# 'E': 64, 'F': 68, 'G': 72, 'H': 76, 'I': 80, 'J': 84, 'K': 88, 'L': 92,
# 'M': 96, 'N': 100, 'O': 104, 'P': 108, 'Q': 112, 'R': 116, 'S': 120, 'T': 124,
# 'U': 128, 'V': 132, 'W': 136, 'X': 140, 'Y': 144, 'Z': 148, 'a': 152, 'b': 156,
# 'c': 160, 'd': 164, 'e': 168, 'f': 172, 'g': 176, 'h': 180, 'i': 184, 'j': 188,
# 'k': 192, 'l': 196, 'm': 200, 'n': 204, 'o': 208, 'p': 212, 'q': 216, 'r': 220,
# 's': 224, 't': 228, 'u': 232, 'v': 236, 'w': 240, 'x': 244, 'y': 248, 'z': 252,
# '=': 256,
# }
#
# newstr = ''
# li = list()
# for i in range(len(aes_result)):
# li.append(alpha_dict[aes_result[i]])
# for i in range(len(li)):
# li[i] += (i % 4)
# for i in range(len(li)):
# newstr += truth_table[li[i]]
# return newstr
# return msg
def func_yufolunchan_v2(sellf, encode_type, source_text, key):
text = source_text.strip().lower()
if len(key) < 1:
key = "qianxiao996"
f = open('./module/yufoluntan_main.js', 'r')
jsf_code = f.read()
js = execjs.get()
# print(jsf_code)
# print "Using Engine %s" % js.name
jsf_int = js.compile(jsf_code)
return_text = jsf_int.call("aes_encrypt", text, key)
# foYue = {"啰": "e", "羯": "E", "婆": "t", "提": "T", "摩": "a", "埵": "A", "诃": "o", "迦": "O", "耶": "i", "吉": "I",
# "娑": "n",
# "佛": "N", "夜": "s", "驮": "S", "那": "h", "谨": "H", "悉": "r", "墀": "R", "阿": "d", "呼": "D", "萨": "l",
# "尼": "L",
# "陀": "c", "唵": "C", "唎": "u", "伊": "U", "卢": "m", "喝": "M", "帝": "w", "烁": "W", "醯": "f", "蒙": "F",
# "罚": "g",
# "沙": "G", "嚧": "y", "他": "Y", "南": "p", "豆": "P", "无": "b", "孕": "B", "菩": "v", "伽": "V", "怛": "k",
# "俱": "K",
# "哆": "j", "度": "J", "皤": "x", "阇": "X", "室": "q", "地": "Q", "利": "z", "遮": "Z", "穆": "0", "参": "1",
# "舍": "2",
# "苏": "3", "钵": "4", "曳": "5", "数": "6", "写": "7", "栗": "8", "楞": "9", "咩": "+", "输": "/", "漫": "=",
# "e": "啰",
# "E": "羯", "t": "婆", "T": "提", "a": "摩", "A": "埵", "o": "诃", "O": "迦", "i": "耶", "I": "吉", "n": "娑",
# "N": "佛",
# "s": "夜", "S": "驮", "h": "那", "H": "谨", "r": "悉", "R": "墀", "d": "阿", "D": "呼", "l": "萨", "L": "尼",
# "c": "陀",
# "C": "唵", "u": "唎", "U": "伊", "m": "卢", "M": "喝", "w": "帝", "W": "烁", "f": "醯", "F": "蒙", "g": "罚",
# "G": "沙",
# "y": "嚧", "Y": "他", "p": "南", "P": "豆", "b": "无", "B": "孕", "v": "菩", "V": "伽", "k": "怛", "K": "俱",
# "j": "哆",
# "J": "度", "x": "皤", "X": "阇", "q": "室", "Q": "地", "z": "利", "Z": "遮", "0": "穆", "1": "参", "2": "舍",
# "3": "苏",
# "4": "钵", "5": "曳", "6": "数", "7": "写", "8": "栗", "9": "楞", "+": "咩", "/": "输", "=": "漫"}
CODE = {"e": "", "E": "", "t": "", "T": "",
"a": "", "A": "", "o": "", "O": "",
"i": "", "I": "", "n": "", "N": "",
"s": "", "S": "", "h": "", "H": "",
"r": "", "R": "", "d": "", "D": "",
"l": "", "L": "", "c": "", "C": "",
"u": "", "U": "", "m": "", "M": "",
"w": "", "W": "", "f": "", "F": "",
"g": "", "G": "", "y": "", "Y": "", "p": "",
"P": "", "b": "", "B": "", "v": "",
"V": "", "k": "", "K": "", "j": "",
"J": "", "x": "", "X": "", "q": "",
"Q": "", "z": "", "Z": "", "0": "",
"1": "", "2": "", "3": "", "4": "",
"5": "", "6": "", "7": "", "8": "",
"9": "", "+": "", "/": "", "=": "",
}
msg = ''
for char in return_text:
if char in CODE:
if char == ' ':
pass
else:
msg += (CODE[char])
else:
return [0, '文本中含有不能识别的字符!',"与佛论禅2.0"]
# result_text = msg
# print(msg)
return [1,"佛又曰:" + msg,"与佛论禅2.0"]
def func_atbash(self, encode_type, source_text):
str1 = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
str2 = "zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA"
result_text = ""
for s in source_text:
if s in str1:
if s != ' ':
result_text = result_text + str2[str1.index(s)]
else:
result_text = result_text + ' '
else:
return [0, "埃特巴什码只能对英文字母加密!","Atbash密码"]
return [1, result_text,"Atbash密码"]
def func_zhalan_w(self, encode_type, source_text, n):
n = int(n)
'''加密'''
array = self.generate_w(source_text, n)
msg = []
for row in range(n): # 将每行的字符连起来
for col in range(len(source_text)):
if array[row][col] != '.':
msg.append(array[row][col])
return [1, str(''.join(msg)),"栅栏密码(W型)"]
def generate_w(self, string, n):
'''将字符排列成w型'''
array = [['.'] * len(string) for i in range(n)] # 生成初始矩阵
row = 0
upflag = False
for col in range(len(string)): # 在矩阵上按w型画出string
array[row][col] = string[col]
if row == n - 1:
upflag = True
if row == 0:
upflag = False
if upflag:
row -= 1
else:
row += 1
return array
def func_vigenere(self, encode_type, source_text, key):
try:
text = source_text.lower()
ptLen = len(text)
keyLen = len(key)
if keyLen == 0:
return [0, '请输入一个合法的key!',"维吉尼亚密码"]
quotient = ptLen // keyLen # 商
remainder = ptLen % keyLen # 余
out = ""
for i in range(0, quotient):
for j in range(0, keyLen):
c = int((ord(text[i * keyLen + j]) - ord('a') + ord(key[j]) - ord('a')) % 26 + ord('a'))
# global output
out += chr(c)
for i in range(0, remainder):
c = int((ord(text[quotient * keyLen + i]) - ord('a') + ord(key[i]) - ord('a')) % 26 + ord('a'))
# global output
out += chr(c)
if out != '':
return [1, out,"维吉尼亚密码"]
else:
return [0, '加密失败!',"维吉尼亚密码"]
except Exception as e:
return [0,str(e),"维吉尼亚密码"]
def func_sifang(self, encode_type, source_text, key1, key2):
try:
text = source_text.lower()
key1 = key1.upper()
key2 = key2.upper()
matrix = "ABCDEFGHIJKLMNOPRSTUVWXYZ"
pla = "abcdefghijklmnoprstuvwxyz"
key1 = '[' + key1 + "]"
key2 = '[' + key2 + "]"
key1 = ''.join(collections.OrderedDict.fromkeys(key1))
key2 = ''.join(collections.OrderedDict.fromkeys(key2))
matrix1 = re.sub('[\[\]]', '', key1) + re.sub(key1, '', matrix)
matrix2 = re.sub('[\[\]]', '', key2) + re.sub(key2, '', matrix)
matrix_list1 = []
matrix_list2 = []
pla_list = []
for i in range(0, len(matrix1), 5):
matrix_list1.append(list(matrix1[i:i + 5]))
for i in range(0, len(matrix2), 5):
matrix_list2.append(list(matrix2[i:i + 5]))
for i in range(0, len(pla), 5):
pla_list.append(list(pla[i:i + 5]))
pla = text.replace(' ', '')
if len(pla) % 2 != 0:
pla += 'x'
cip = ""
for i in range(0, len(pla), 2):
data = pla[i:i + 2]
# 两个子母中第一个字母位置
first = self.find_index(data[0], pla_list)
# 两个子母中第二个字母位置
second = self.find_index(data[1], pla_list)
return_cip = ""
return_cip += matrix_list1[first[0]][second[1]]
return_cip += matrix_list2[second[0]][first[1]]
cip += return_cip
if cip != '':
return [1, cip,"四方密码"]
else:
return [0, '加密失败!',"四方密码"]
except Exception as e:
return [0, str(e),"四方密码"]
def gcd(self, a, b):
if (a < b):
t = a
a = b
b = t
while (0 != b):
t = a
a = b
b = t % b
return a
def func_fangshe(self, encode_type, source_text, key1, key2):
try:
letter_list = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" # 字母表
text = (source_text.strip())
# print(text,key2,key1)
try:
if (0 == int(key1.isdigit()) or 0 == int(key2.isdigit())):
return [0, '输入有误! 密钥为数字!',"仿射密码"]
if (self.gcd(int(key1), 26) != 1):
return [0, '输入有误! key1和26必须互素',"仿射密码"]
except:
return [0, '输入有误!',"仿射密码"]
else:
ciphertext = ""
for ch in text: # 遍历明文
if ch.isalpha(): # 明文是否为字母,如果是,则判断大小写,分别进行加密
if ch.isupper():
ciphertext += letter_list[(int(key1) * (ord(ch) - 65) + int(key2)) % 26]
else:
ciphertext += letter_list[(int(key1) * (ord(ch) - 97) + int(key2)) % 26].lower()
else: # 如果密文不为字母,直接添加到密文字符串里
ciphertext += ch
return [1, ciphertext,"仿射密码"]
except Exception as e:
return [0, str(e),"仿射密码"]
# 查询明文字母位置
def find_index(self, x, pla_list):
for i in range(len(pla_list)):
for j in range(len(pla_list[i])):
if pla_list[i][j] == x:
return i, j
def func_zhalan(self, encode_type, source_text, key):
try:
n = int(key)
ans = ''
for i in range(n):
for j in range(int(source_text.__len__() / n + 0.5)):
try:
ans += source_text[j * n + i]
except:
pass
except:
return [0, '请输入正确的分组!',"栅栏密码"]
if ans != '':
return [1, ans,"栅栏密码"]
else:
return [0, '加密失败!',"栅栏密码"]
def func_Polybius(self, encode_type, source_text):
Polybius_dic = {
'A': '11', 'B': '12', 'C': '13', 'D': '14', 'E': '15',
'F': '21', 'G': '22', 'H': '23', 'I': '24', 'J': '24', 'K': '25',
'L': '31', 'M': '32', 'N': '33', 'O': '34', 'P': '35',
'Q': '41', 'R': '42', 'S': '43', 'T': '44', 'U': '45',
'V': '51', 'W': '52', 'X': '53', 'Y': '54', 'Z': '55'
}
result = ''
for i in source_text:
result += Polybius_dic.get(i.upper())
return [1, result,"棋盘密码(ADFGX)"]
def func_a1z26(self, encode_type, source_text):
str1 = string.ascii_lowercase
s = ""
for i in source_text.lower():
s += "-{}".format(str1.index(i) + 1)
result = s[1:]
return [1, result,"A1z26密码"]

70
module/func_tools.py Normal file
View File

@ -0,0 +1,70 @@
# coding=utf-8
import base36
import base58
import base62
import base64
import base91
import html
import py3base92
import urllib.parse
import execjs
import js2py
class Class_Tools:
def func_str_chaifen(self,encode_type,source_text,length):
try:
changdu = int(length)
except:
return [0, '请输入一个数字!',"字符拆分"]
if changdu > len(source_text):
return [0, '分割长度大于字符串长度!',"字符拆分"]
else:
text = [source_text[i:i + changdu] for i in range(0, len(source_text), changdu)]
# text = re.findall(r'.{'+str(changdu)+'}', text)
return_text = ' '.join(text)
return [1, str(return_text),"字符拆分"]
def func_str_split(self,encode_type,source_text,split_str):
text = source_text.split(split_str)
return_text = ' '.join(text)
return [1, str(return_text.strip()),"字符分割"]
def func_str_tongji(self,encode_type,source_text):
s = ''
l = len(source_text)
for x in range(0, l):
if not source_text[x] in s:
s += source_text[x]
result = {d: 0 for d in s}
for d in source_text:
for alpha in s:
if d == alpha:
result[alpha] = result[alpha] + 1
result1 = sorted(result.items(), key=lambda x: x[1], reverse=True)
return_text = '大->小:\n字符:'
for x in result1:
return_text += str(x[0])
return_text+='\n次数:'
for x in result1:
return_text += str(x[1])
return_text += '\n\n小->大:\n字符:'
result2 = sorted(result.items(), key=lambda x: x[1], reverse=False)
for x in result2:
return_text += str(x[0])
result2 = sorted(result.items(), key=lambda x: x[1], reverse=False)
return_text+='\n次数:'
for x in result2:
return_text += str(x[1])
return_text += '\n\n'
for x in result1:
return_text += x[0] + ":" + str(x[1]) + '\n'
return [1, return_text,"字符统计"]
def func_str_re(self,encode_type,source_text):
text = source_text.strip()
return [1, str(text[::-1]),"字符替换"]

313
module/jjdecode.py Normal file
View File

@ -0,0 +1,313 @@
#!/usr/bin/env python
#
# Python version of the jjdecode function written by Syed Zainudeen
# http://csc.cs.utm.my/syed/images/files/jjdecode/jjdecode.html
#
# +NCR/CRC! [ReVeRsEr] - crackinglandia@gmail.com
# Thanks to Jose Miguel Esparza (@EternalTodo) for the final push to make it work!
#
#result = JJDecoder(cryptostr)
import re
class JJDecoder(object):
def __init__(self, jj_encoded_data):
self.encoded_str = jj_encoded_data
def clean(self):
return re.sub('^\s+|\s+$', '', self.encoded_str)
def checkPalindrome(self, Str):
startpos = -1
endpos = -1
gv, gvl = -1, -1
index = Str.find('"\'\\"+\'+",')
if index == 0:
startpos = Str.find('$$+"\\""+') + 8
endpos = Str.find('"\\"")())()')
gv = Str[Str.find('"\'\\"+\'+",')+9:Str.find('=~[]')]
gvl = len(gv)
else:
gv = Str[0:Str.find('=')]
gvl = len(gv)
startpos = Str.find('"\\""+') + 5
endpos = Str.find('"\\"")())()')
return (startpos, endpos, gv, gvl)
def decode(self):
self.encoded_str = self.clean()
startpos, endpos, gv, gvl = self.checkPalindrome(self.encoded_str)
if startpos == endpos:
raise Exception('No data!')
data = self.encoded_str[startpos:endpos]
b = ['___+', '__$+', '_$_+', '_$$+', '$__+', '$_$+', '$$_+', '$$$+', '$___+', '$__$+', '$_$_+', '$_$$+', '$$__+', '$$_$+', '$$$_+', '$$$$+']
str_l = '(![]+"")[' + gv + '._$_]+'
str_o = gv + '._$+'
str_t = gv + '.__+'
str_u = gv + '._+'
str_hex = gv + '.'
str_s = '"'
gvsig = gv + '.'
str_quote = '\\\\\\"'
str_slash = '\\\\\\\\'
str_lower = '\\\\"+'
str_upper = '\\\\"+' + gv + '._+'
str_end = '"+'
out = ''
while data != '':
# l o t u
if data.find(str_l) == 0:
data = data[len(str_l):]
out += 'l'
continue
elif data.find(str_o) == 0:
data = data[len(str_o):]
out += 'o'
continue
elif data.find(str_t) == 0:
data = data[len(str_t):]
out += 't'
continue
elif data.find(str_u) == 0:
data = data[len(str_u):]
out += 'u'
continue
# 0123456789abcdef
if data.find(str_hex) == 0:
data = data[len(str_hex):]
for i in range(len(b)):
if data.find(b[i]) == 0:
data = data[len(b[i]):]
out += '%x' % i
break
continue
# start of s block
if data.find(str_s) == 0:
data = data[len(str_s):]
# check if "R
if data.find(str_upper) == 0: # r4 n >= 128
data = data[len(str_upper):] # skip sig
ch_str = ''
for i in range(2): # shouldn't be more than 2 hex chars
# gv + "."+b[ c ]
if data.find(gvsig) == 0:
data = data[len(gvsig):]
for k in range(len(b)): # for every entry in b
if data.find(b[k]) == 0:
data = data[len(b[k]):]
ch_str = '%x' % k
break
else:
break
out += chr(int(ch_str, 16))
continue
elif data.find(str_lower) == 0: # r3 check if "R // n < 128
data = data[len(str_lower):] # skip sig
ch_str = ''
ch_lotux = ''
temp = ''
b_checkR1 = 0
for j in range(3): # shouldn't be more than 3 octal chars
if j > 1: # lotu check
if data.find(str_l) == 0:
data = data[len(str_l):]
ch_lotux = 'l'
break
elif data.find(str_o) == 0:
data = data[len(str_o):]
ch_lotux = 'o'
break
elif data.find(str_t) == 0:
data = data[len(str_t):]
ch_lotux = 't'
break
elif data.find(str_u) == 0:
data = data[len(str_u):]
ch_lotux = 'u'
break
# gv + "."+b[ c ]
if data.find(gvsig) == 0:
temp = data[len(gvsig):]
for k in range(8): # for every entry in b octal
if temp.find(b[k]) == 0:
if int(ch_str + str(k), 8) > 128:
b_checkR1 = 1
break
ch_str += str(k)
data = data[len(gvsig):] # skip gvsig
data = data[len(b[k]):]
break
if b_checkR1 == 1:
if data.find(str_hex) == 0: # 0123456789abcdef
data = data[len(str_hex):]
# check every element of hex decode string for a match
for i in range(len(b)):
if data.find(b[i]) == 0:
data = data[len(b[i]):]
ch_lotux = '%x' % i
break
break
else:
break
out += chr(int(ch_str,8)) + ch_lotux
continue
else: # "S ----> "SR or "S+
# if there is, loop s until R 0r +
# if there is no matching s block, throw error
match = 0;
n = None
# searching for matching pure s block
while True:
n = ord(data[0])
if data.find(str_quote) == 0:
data = data[len(str_quote):]
out += '"'
match += 1
continue
elif data.find(str_slash) == 0:
data = data[len(str_slash):]
out += '\\'
match += 1
continue
elif data.find(str_end) == 0: # reached end off S block ? +
if match == 0:
raise '+ no match S block: ' + data
data = data[len(str_end):]
break # step out of the while loop
elif data.find(str_upper) == 0: # r4 reached end off S block ? - check if "R n >= 128
if match == 0:
raise 'no match S block n>128: ' + data
data = data[len(str_upper):] # skip sig
ch_str = ''
ch_lotux = ''
for j in range(10): # shouldn't be more than 10 hex chars
if j > 1: # lotu check
if data.find(str_l) == 0:
data = data[len(str_l):]
ch_lotux = 'l'
break
elif data.find(str_o) == 0:
data = data[len(str_o):]
ch_lotux = 'o'
break
elif data.find(str_t) == 0:
data = data[len(str_t):]
ch_lotux = 't'
break
elif data.find(str_u) == 0:
data = data[len(str_u):]
ch_lotux = 'u'
break
# gv + "."+b[ c ]
if data.find(gvsig) == 0:
data = data[len(gvsig):] # skip gvsig
for k in range(len(b)): # for every entry in b
if data.find(b[k]) == 0:
data = data[len(b[k]):]
ch_str += '%x' % k
break
else:
break # done
out += chr(int(ch_str, 16))
break # step out of the while loop
elif data.find(str_lower) == 0: # r3 check if "R // n < 128
if match == 0:
raise 'no match S block n<128: ' + data
data = data[len(str_lower):] # skip sig
ch_str = ''
ch_lotux = ''
temp = ''
b_checkR1 = 0
for j in range(3): # shouldn't be more than 3 octal chars
if j > 1: # lotu check
if data.find(str_l) == 0:
data = data[len(str_l):]
ch_lotux = 'l'
break
elif data.find(str_o) == 0:
data = data[len(str_o):]
ch_lotux = 'o'
break
elif data.find(str_t) == 0:
data = data[len(str_t):]
ch_lotux = 't'
break
elif data.find(str_u) == 0:
data = data[len(str_u):]
ch_lotux = 'u'
break
# gv + "."+b[ c ]
if data.find(gvsig) == 0:
temp = data[len(gvsig):]
for k in range(8): # for every entry in b octal
if temp.find(b[k]) == 0:
if int(ch_str + str(k), 8) > 128:
b_checkR1 = 1
break
ch_str += str(k)
data = data[len(gvsig):] # skip gvsig
data = data[len(b[k]):]
break
if b_checkR1 == 1:
if data.find(str_hex) == 0: # 0123456789abcdef
data = data[len(str_hex):]
# check every element of hex decode string for a match
for i in range(len(b)):
if data.find(b[i]) == 0:
data = data[len(b[i]):]
ch_lotux = '%x' % i
break
else:
break
out += chr(int(ch_str, 8)) + ch_lotux
break # step out of the while loop
elif (0x21 <= n and n <= 0x2f) or (0x3A <= n and n <= 0x40) or ( 0x5b <= n and n <= 0x60 ) or ( 0x7b <= n and n <= 0x7f ):
out += data[0]
data = data[1:]
match += 1
continue
print('No match : ' + data)
break
return out

123
module/jjencode.py Normal file
View File

@ -0,0 +1,123 @@
# Python port of the Javascript function written by Yosuke HASEGAWA (@hasegawayosuke)
# http://utf-8.jp/public/jjencode.html
# result = (JJEncoder(cryptostr).encoded_text).encode()
#
__author__ = 'nriva'
import re
from struct import unpack
class JJEncoder(object):
def __init__(self, text, var_name = "$", palindrome = False):
if text:
self.encoded_text = self.__encode(var_name, text)
if palindrome:
self.encoded_text = re.split("[,;]$", self.encoded_text)[0]
self.encoded_text = """\"\'\\\"+\'+\",""" + self.encoded_text + "".join(list(self.encoded_text)[::-1])
def __encode(self, gv, text):
r = ""
n = None
t = None
b = [ "___", "__$", "_$_", "_$$", "$__", "$_$", "$$_", "$$$", "$___", "$__$", "$_$_", "$_$$", "$$__", "$$_$", "$$$_", "$$$$"]
s = ""
for i in range(len(text)):
n = ord(text[i])
if (n == 0x22 or n == 0x5c):
s += "\\\\\\" + chr(unpack("b", text[i])[0])
elif ((0x21 <= n and n <= 0x2f) or (0x3A <= n and n <= 0x40) or ( 0x5b <= n and n <= 0x60 ) or ( 0x7b <= n and n <= 0x7f)):
s += text[i]
elif ((0x30 <= n and n <= 0x39) or (0x61 <= n and n <= 0x66)):
if s:
r += '"' + s + '"+'
if n < 0x40:
tmp_index = n - 0x30
else:
tmp_index = n - 0x57
r += gv + "." + b[ tmp_index ] + "+"
s = ""
elif n == 0x6c: # 'l'
if s:
r += '"' + s + '"+'
r += '(![]+"")[' + gv + '._$_]+'
s = ""
elif n == 0x6f: # 'o'
if s:
r += '"' + s + '"+'
r += gv + "._$+"
s = ""
elif n == 0x74: # 'u'
if s:
r += '"' + s + '"+'
r += gv + ".__+"
s = ""
elif n == 0x75: # 'u'
if s:
r += '"' + s + '"+'
r += gv + "._+"
s = ""
elif n < 128:
if s:
r += '"' + s
else:
r += '"'
r += '\\\\"+' + "".join([self.__f(gv, b, i) for i in [int(x) for x in re.findall("[0-7]", oct(n))[1:]]])
s = ""
else:
if s:
r += '"' + s
else:
r += '"'
r += '\\\\"+' + gv + "._+" + "".join([self.__g(gv, b, i) for i in [int(x) for x in re.findall("[0-9a-f]", oct(n), re.I)[1:]]])
s = ""
if s:
r += '"' + s + '"+'
r = (gv + "=~[];" +
gv + "={___:++" + gv +',$$$$:(![]+"")['+gv+"],__$:++"+gv+',$_$_:(![]+"")['+gv+"],_$_:++"+
gv+',$_$$:({}+"")['+gv+"],$$_$:("+gv+"["+gv+"""]+"")["""+gv+"],_$$:++"+gv+',$$$_:(!""+"")['+
gv+"],$__:++"+gv+",$_$:++"+gv+',$$__:({}+"")['+gv+"],$$_:++"+gv+",$$$:++"+gv+",$___:++"+gv+",$__$:++"+gv+"};"+
gv+".$_="+
"("+gv+".$_="+gv+'+"")['+gv+".$_$]+"+
"("+gv+"._$="+gv+".$_["+gv+".__$])+"+
"("+gv+".$$=("+gv+'.$+"")['+gv+".__$])+"+
"((!"+gv+')+"")['+gv+"._$$]+"+
"("+gv+".__="+gv+".$_["+gv+".$$_])+"+
"("+gv+'.$=(!""+"")['+gv+".__$])+"+
"("+gv+'._=(!""+"")['+gv+"._$_])+"+
gv+".$_["+gv+".$_$]+"+
gv+".__+"+
gv+"._$+"+
gv+".$;"+
gv+".$$="+
gv+".$+"+
'(!""+"")['+gv+"._$$]+"+
gv+".__+"+
gv+"._+"+
gv+".$+"+
gv+".$$;"+
gv+".$=("+gv+".___)["+gv+".$_]["+gv+".$_];"+
gv+".$("+gv+".$("+gv+'.$$+"\\""+' + r + '"\\"")())();')
return r
def __f(self, a, b, c):
return a + "." + b[c] + "+"
def __g(self, a, b, c):
return a + "." + b[int(c, 16)] + "+"

142
module/jother.py Normal file
View File

@ -0,0 +1,142 @@
# python3
# Jother Encode
#
# a = Jother()
# b =a.toStr("abcd")
# c = a.toScript("abcd")
class Jother():
def __init__(self):
self.base = [
"[]",
"{}",
"![]",
"!![]",
"~[]",
"+{}",
"{}[[]]"
]
self.nums = [
"+[]",
"+!![]",
"!![]+!![]",
"!![]+!![]+!![]",
"!![]+!![]+!![]+!![]",
"!![]+!![]+!![]+!![]+!![]",
"!![]+!![]+!![]+!![]+!![]+!![]",
"!![]+!![]+!![]+!![]+!![]+!![]+!![]",
"!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]",
"!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]"
]
self.base.append(self.q1(self.q3(self.nums[1]+self.q4(self.q1(self.base[3])+self.q2(self.nums[3])) +
self.q3(self.nums[1])+self.q3(self.nums[0])+self.q3(self.nums[0])+self.q3(self.nums[0]))))
self.chars = {
"0": self.q1(self.nums[0]),
"1": self.q1(self.nums[1]),
"2": self.q1(self.nums[2]),
"3": self.q1(self.nums[3]),
"4": self.q1(self.nums[4]),
"5": self.q1(self.nums[5]),
"6": self.q1(self.nums[6]),
"7": self.q1(self.nums[7]),
"8": self.q1(self.nums[8]),
"9": self.q1(self.nums[9]),
"a": self.q1(self.base[2])+self.q2(self.nums[1]),
"b": self.q1(self.base[1])+self.q2(self.nums[2]),
"c": self.q1(self.base[1])+self.q2(self.nums[5]),
"d": self.q1(self.base[6])+self.q2(self.nums[2]),
"e": self.q1(self.base[3])+self.q2(self.nums[3]),
"f": self.q1(self.base[2])+self.q2(self.nums[0]),
"i": self.q1(self.base[6])+self.q2(self.nums[5]),
"j": self.q1(self.base[1])+self.q2(self.nums[3]),
"l": self.q1(self.base[2])+self.q2(self.nums[2]),
"n": self.q1(self.base[6])+self.q2(self.nums[1]),
"o": self.q1(self.base[1])+self.q2(self.nums[1]),
"r": self.q1(self.base[3])+self.q2(self.nums[1]),
"s": self.q1(self.base[2])+self.q2(self.nums[3]),
"t": self.q1(self.base[3])+self.q2(self.nums[0]),
"u": self.q1(self.base[6])+self.q2(self.nums[0]),
"y": self.q1(self.base[7])+self.q2(self.nums[7]),
"I": self.q1(self.base[7])+self.q2(self.nums[0]),
"N": self.q1(self.base[5])+self.q2(self.nums[0]),
"O": self.q1(self.base[1])+self.q2(self.nums[8]),
" ": self.q1(self.base[1])+self.q2(self.nums[7]),
"[": self.q1(self.base[1])+self.q2(self.nums[0]),
"]": self.q1(self.base[1])+self.q2(self.nums[7]+self.q4(self.nums[7])),
"-": self.q1(self.base[4])+self.q2(self.nums[0]),
"+": self.q1(self.q3(self.nums[1]+self.q4(self.q1(self.base[3])+self.q2(self.nums[3]))+self.q3(self.nums[1])+self.q3(self.nums[0])+self.q3(self.nums[0])))+self.q2(self.nums[2])
}
self.f = "[]["+self.toStr("sort")+"]["+self.toStr("constructor")+"]"
self.localstr = "[]+"+self.toScript("return location")
self.chars["h"] = self.q5(self.localstr)+self.q2(self.nums[0])
self.chars["p"] = self.q5(self.localstr)+self.q2(self.nums[3])
self.chars[":"] = self.q5(self.localstr)+self.q2(self.nums[4])
self.chars["/"] = self.q5(self.localstr)+self.q2(self.nums[6])
self.rc_unescape = self.toScript("return unescape")
self.rc_escape = self.toScript("return escape")
self.chars["%"] = self.rc_escape + \
"("+self.toStr("[")+")"+self.q2(self.nums[0])
def q1(self, s):
return "("+s+"+[])"
def q2(self, s):
return "["+s+"]"
def q3(self, s):
return "+("+s+"+[])"
def q4(self, s):
return "+"+s
def q5(self, s):
return "("+s+")"
def toScript(self, script):
return self.f+"("+self.toStr(script)+")()"
def toUnescape(self, charCode):
return self.rc_unescape + "(" + self.toStr("%" + self.toHex(charCode, 2)) + ")"
def toHexs(self, charCode):
return self.toStr("\\x" + self.toHex(charCode, 2))
def toUnicode(self, charCode):
return self.toStr("\\u" + self.toHex(charCode, 4))
def toHex(self, num, d):
hexs = num.self.toString(16)
while(len(hexs) < d):
hexs = "0{}".format(hexs)
return hexs
def toChar(self, char):
charCode = ord(char)
if self.chars[char] != '':
return self.chars[char]
if char == "\\" or char == "x":
self.chars[char] = self.toUnescape(charCode)
return self.chars[char]
unis = self.toUnicode(charCode)
if charCode < 128:
unes = self.toUnescape(charCode)
if len(unis) > len(unes):
unis = unes
hexs = self.toHexs(charCode)
if len(unis) > len(hexs):
unis = hexs
self.chars[char] = unis
return unis
def toStr(self, str):
s = ''
for i in range(len(str)):
if i == 0:
s += ''
else:
s += "+"
s += self.toChar(str[i])
return s

202
module/yufoluntan_main.js Normal file
View File

@ -0,0 +1,202 @@
// JavaScript Documen
const CryptoJS = require('./module/crypto-js.min')
// import CryptoJS from "./crypto-js.min.js";
String.prototype.replaceAll = function (s1, s2) {
var reg = new RegExp(s1, "g");
return this.replace(reg, s2);
}
function aes_encrypt(msg,key) {
var str = CryptoJS.AES.encrypt(msg, key).toString();
// console.log(str)
str = str.substring(10);
return str
}
function encrypt() {
var msg = $("#text-decryped").val();
var key = $("#text-key").val();
if (msg.length < 1) {
$("#error-alert").show();
$("#copy-alert").hide();
$("#error-alert").text("无言者,纵真神再临,亦不可渡。(请输入待加密的明文)");
} else {
if (key.length < 1) {
key = password;
}
$("#text-encryped").val(togod(msg, key));
$("#error-alert").hide();
$("#copy-alert").hide();
}
}
function aes_decrypto(msg,key) {
return CryptoJS.AES.decrypt("U2FsdGVkX1" + msg, key).toString(CryptoJS.enc.Utf8);
}
function decrypt(msg,key) {
if (msg.length < 1) {
return "无言者,纵真神再临,亦不可渡。(请输入待解密的密文)";
} else {
if (msg.substring(0, 4) !== "佛又曰:" || msg.substring(0, 3) !== "佛又曰:" ) {
return "施主可曾记得此为何高僧所言?(不是佛语,请确定密文来源本网站并且密文以“佛曰:”或“佛又曰:”开头”)";
} else {
try {
var str = toman(msg, key);
} catch (err) {
return "施主可曾记得此为何高僧所言?(佛语有误,请确定密钥正确并未被篡改)";
} finally {
}
return str
}
}
}
function togod(msg, key) {
var str = CryptoJS.AES.encrypt(msg, key).toString();
// console.log(str)
str = str.substring(10);
str = str.replaceAll("e", "啰");
str = str.replaceAll("E", "羯");
str = str.replaceAll("t", "婆");
str = str.replaceAll("T", "提");
str = str.replaceAll("a", "摩");
str = str.replaceAll("A", "埵");
str = str.replaceAll("o", "诃");
str = str.replaceAll("O", "迦");
str = str.replaceAll("i", "耶");
str = str.replaceAll("I", "吉");
str = str.replaceAll("n", "娑");
str = str.replaceAll("N", "佛");
str = str.replaceAll("s", "夜");
str = str.replaceAll("S", "驮");
str = str.replaceAll("h", "那");
str = str.replaceAll("H", "谨");
str = str.replaceAll("r", "悉");
str = str.replaceAll("R", "墀");
str = str.replaceAll("d", "阿");
str = str.replaceAll("D", "呼");
str = str.replaceAll("l", "萨");
str = str.replaceAll("L", "尼");
str = str.replaceAll("c", "陀");
str = str.replaceAll("C", "唵");
str = str.replaceAll("u", "唎");
str = str.replaceAll("U", "伊");
str = str.replaceAll("m", "卢");
str = str.replaceAll("M", "喝");
str = str.replaceAll("w", "帝");
str = str.replaceAll("W", "烁");
str = str.replaceAll("f", "醯");
str = str.replaceAll("F", "蒙");
str = str.replaceAll("g", "罚");
str = str.replaceAll("G", "沙");
str = str.replaceAll("y", "嚧");
str = str.replaceAll("Y", "他");
str = str.replaceAll("p", "南");
str = str.replaceAll("P", "豆");
str = str.replaceAll("b", "无");
str = str.replaceAll("B", "孕");
str = str.replaceAll("v", "菩");
str = str.replaceAll("V", "伽");
str = str.replaceAll("k", "怛");
str = str.replaceAll("K", "俱");
str = str.replaceAll("j", "哆");
str = str.replaceAll("J", "度");
str = str.replaceAll("x", "皤");
str = str.replaceAll("X", "阇");
str = str.replaceAll("q", "室");
str = str.replaceAll("Q", "地");
str = str.replaceAll("z", "利");
str = str.replaceAll("Z", "遮");
str = str.replaceAll("0", "穆");
str = str.replaceAll("1", "参");
str = str.replaceAll("2", "舍");
str = str.replaceAll("3", "苏");
str = str.replaceAll("4", "钵");
str = str.replaceAll("5", "曳");
str = str.replaceAll("6", "数");
str = str.replaceAll("7", "写");
str = str.replaceAll("8", "栗");
str = str.replaceAll("9", "楞");
str = str.replaceAll("\\+", "咩");
str = str.replaceAll("/", "输");
str = str.replaceAll("=", "漫");
return "佛曰:" + str;
}
function toman(msg, key) {
str = msg.substring(4);
str = str.replaceAll("啰", "e");
str = str.replaceAll("羯", "E");
str = str.replaceAll("婆", "t");
str = str.replaceAll("提", "T");
str = str.replaceAll("摩", "a");
str = str.replaceAll("埵", "A");
str = str.replaceAll("诃", "o");
str = str.replaceAll("迦", "O");
str = str.replaceAll("耶", "i");
str = str.replaceAll("吉", "I");
str = str.replaceAll("娑", "n");
str = str.replaceAll("佛", "N");
str = str.replaceAll("夜", "s");
str = str.replaceAll("驮", "S");
str = str.replaceAll("那", "h");
str = str.replaceAll("谨", "H");
str = str.replaceAll("悉", "r");
str = str.replaceAll("墀", "R");
str = str.replaceAll("阿", "d");
str = str.replaceAll("呼", "D");
str = str.replaceAll("萨", "l");
str = str.replaceAll("尼", "L");
str = str.replaceAll("陀", "c");
str = str.replaceAll("唵", "C");
str = str.replaceAll("唎", "u");
str = str.replaceAll("伊", "U");
str = str.replaceAll("卢", "m");
str = str.replaceAll("喝", "M");
str = str.replaceAll("帝", "w");
str = str.replaceAll("烁", "W");
str = str.replaceAll("醯", "f");
str = str.replaceAll("蒙", "F");
str = str.replaceAll("罚", "g");
str = str.replaceAll("沙", "G");
str = str.replaceAll("嚧", "y");
str = str.replaceAll("他", "Y");
str = str.replaceAll("南", "p");
str = str.replaceAll("豆", "P");
str = str.replaceAll("无", "b");
str = str.replaceAll("孕", "B");
str = str.replaceAll("菩", "v");
str = str.replaceAll("伽", "V");
str = str.replaceAll("怛", "k");
str = str.replaceAll("俱", "K");
str = str.replaceAll("哆", "j");
str = str.replaceAll("度", "J");
str = str.replaceAll("皤", "x");
str = str.replaceAll("阇", "X");
str = str.replaceAll("室", "q");
str = str.replaceAll("地", "Q");
str = str.replaceAll("利", "z");
str = str.replaceAll("遮", "Z");
str = str.replaceAll("穆", "0");
str = str.replaceAll("参", "1");
str = str.replaceAll("舍", "2");
str = str.replaceAll("苏", "3");
str = str.replaceAll("钵", "4");
str = str.replaceAll("曳", "5");
str = str.replaceAll("数", "6");
str = str.replaceAll("写", "7");
str = str.replaceAll("栗", "8");
str = str.replaceAll("楞", "9");
str = str.replaceAll("咩", "+");
str = str.replaceAll("输", "/");
str = str.replaceAll("漫", "=");
return CryptoJS.AES.decrypt("U2FsdGVkX1" + str, key).toString(CryptoJS.enc.Utf8);
}