admin 发表于 2022-5-28 20:08:01

三进制加解密程序

三进制加解密程序
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

# 作者:伍耀晖        Author: YaoHui.Wu
# 开源日期:2022年5月27日        Open Source Date: 2022-5-27
# 国家:中国        Country: China

import sys

def Ternary(iNumeric, iRadix):
    i, lTrinary = 0,

    if iNumeric and i < 6:
      while iNumeric:
            iNumeric, iRemainder = divmod(iNumeric, iRadix)

            lTrinary = iRemainder

            i += 1

    return lTrinary

if __name__ == "__main__":
    if len(sys.argv) < 4: print("Usage\n\tEncryption: TrinaryCipher -e/-E Plaintext.file Ciphertext.file Password\n\tDecrytion: TrinaryCipher -d/-D Ciphertext.file Plaintext.file Password")

    elif sys.argv == "-e" or sys.argv == "-E":
      strPassword, lData = sys.argv, []

      iLength, k = len(strPassword), 0

      with open(sys.argv, "br") as fdPlaintext:
            bData = fdPlaintext.read()

            iFileSize = fdPlaintext.tell()

      for i in range(iFileSize):
            lTrinary, lPassword, strData = Ternary(bData, 3), Ternary(ord(strPassword), 3), ""

            for j in range(6):
                if lTrinary == lPassword == 0: strData += "0"

                elif lTrinary == 0 and lPassword == 1: strData += "2"

                elif lTrinary == 0 and lPassword == 2: strData += "2"

                elif lTrinary == 1 and lPassword == 0: strData += "1"

                elif lTrinary == lPassword == 1: strData += "1"

                elif lTrinary == 1 and lPassword == 2: strData += "1"

                elif lTrinary == 2 and lPassword == 0: strData += "2"

                elif lTrinary == 2 and lPassword == 1: strData += "0"

                elif lTrinary == lPassword == 2: strData += "0"

            lData.append(int(strData[::-1], 3))

            k = (k + 1) % iLength

      with open(sys.argv, "bw") as fdCiphertext:
            for iData in lData:
                fdCiphertext.write(iData.to_bytes(2, "little"))

    elif sys.argv == "-d" or sys.argv == "-D":
      strPassword, lData = sys.argv, []

      iLength, k = len(strPassword), 0

      with open(sys.argv, "br") as fdCiphertext:
            bData = fdCiphertext.read(2)

            while bData:
                lTrinary, lPassword, strData = Ternary(int.from_bytes(bData, "little"), 3), Ternary(ord(strPassword), 3), ""

                for j in range(6):
                  if lTrinary == lPassword == 0: strData += "0"

                  elif lTrinary == 0 and lPassword == 1: strData += "2"

                  elif lTrinary == 0 and lPassword == 2: strData += "2"

                  elif lTrinary == 1 and lPassword == 0: strData += "1"

                  elif lTrinary == lPassword == 1: strData += "1"

                  elif lTrinary == 1 and lPassword == 2: strData += "1"

                  elif lTrinary == 2 and lPassword == 0: strData += "2"

                  elif lTrinary == 2 and lPassword == 1: strData += "0"

                  elif lTrinary == lPassword == 2: strData += "0"

                lData.append(int(strData[::-1], 3))

                k = (k + 1) % iLength

                bData = fdCiphertext.read(2)

      with open(sys.argv, "bw") as fdPlaintext:
            for iData in lData:
                fdPlaintext.write(iData.to_bytes(1, "little"))

    else: print("Usage\n\tEncryption: TrinaryCipher -e/-E Plaintext.file Ciphertext.file Password\n\tDecrytion: TrinaryCipher -d/-D Ciphertext.file Plaintext.file Password")
页: [1]
查看完整版本: 三进制加解密程序