v1.3.7
This commit is contained in:
parent
24db7a9272
commit
92019c76bc
3531
CTF-Tools.py
3531
CTF-Tools.py
File diff suppressed because it is too large
Load Diff
|
@ -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"))
|
|
@ -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", "取消"))
|
|
@ -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", "取消"))
|
||||
|
|
|
@ -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.
Binary file not shown.
231
GUI/main.py
231
GUI/main.py
|
@ -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", "百家姓编码"))
|
||||
|
|
Binary file not shown.
|
@ -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 "编码结果"
|
||||
|
|
|
@ -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])
|
40
README.md
40
README.md
|
@ -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.
Binary file not shown.
|
@ -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 = 默认皮肤
|
||||
|
||||
|
|
|
@ -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])
|
|
@ -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
|
||||
|
|
@ -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.
File diff suppressed because one or more lines are too long
|
@ -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
|
|
@ -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]
|
|
@ -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, '解码失败',"百家姓编码"]
|
|
@ -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密码"]
|
|
@ -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|356)\\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,"百家姓编码"]
|
|
@ -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密码"]
|
|
@ -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]),"字符替换"]
|
|
@ -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
|
|
@ -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)] + "+"
|
|
@ -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
|
||||
|
|
@ -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);
|
||||
}
|
||||
|
Loading…
Reference in New Issue