【问题标题】:Encoding and decoding编码和解码
【发布时间】:2010-01-29 12:58:37
【问题描述】:

我希望对一些可能是 1 字符长或 10,000 或无限的文本进行编码 并解码(反转算法)。

我在 PHP 上寻找类似于 MD5 的东西,但它是可逆的,因为 MD5 是一种方式。

这可能是服务器端或 JavaScript。如果两者兼而有之,那就更好了。

【问题讨论】:

  • 对文本进行编码和解码的目的是什么?你想加密它以确保安全,你想压缩它还是有其他原因?
  • 压缩将是你的答案:)
  • md5 5 是一种方式,因为它是一种哈希算法。您正在寻找的是一种加密算法,例如 DES 或 Triple DES 编辑:如果您需要压缩,请选择 GZip
  • gzip 会将其压缩为文件,还是返回包含解压缩密钥的字符串?

标签: text compression encode decode


【解决方案1】:

用于压缩

在 Javascript 中,http://rumkin.com/tools/compression/compress_huff.php

也可以看看javascript text compression/decompression

用于加密

在 PHP 中,你可以使用 mcrypt:

http://www.php.net/manual/en/function.mcrypt-encrypt.php

http://www.php.net/manual/en/function.mcrypt-decrypt.php

示例代码(来自上述网站):

<?php
class Cipher {
    private $securekey, $iv;
    function __construct($textkey) {
        $this->securekey = hash('sha256',$textkey,TRUE);
        $this->iv = mcrypt_create_iv(32);
    }
    function encrypt($input) {
        return base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $this->securekey, $input, MCRYPT_MODE_ECB, $this->iv));
    }
    function decrypt($input) {
        return trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $this->securekey, base64_decode($input), MCRYPT_MODE_ECB, $this->iv));
    }
}

$cipher = new Cipher('secret passphrase');

$encryptedtext = $cipher->encrypt("hide me");
echo "->encrypt = $encryptedtext<br />";

$decryptedtext = $cipher->decrypt($encryptedtext);
echo "->decrypt = $decryptedtext<br />";

var_dump($cipher);
?> 

【讨论】:

  • OP澄清说他不想要加密,而是压缩。
  • 哦。问题已完全改变。
  • 对不起,伙计,但如果要加密的字符串上有 3050 个字符,这种压缩是相当愚蠢的,你最终会得到 5000+ 个字符,因此它并没有使它的大小变小......事实上它使它更大。
【解决方案2】:

如果您想压缩字符串,请参阅this question 了解有关 LZW、Huffman、LZ77 等的 JavaScript 实现的信息。我很确定 PHP 中有类似的库。

【讨论】:

    【解决方案3】:

    PHPJS 有 rot13 的实现,以及 URL 编码(PHPJS)。

    【讨论】:

    • 但不是 rot13 之类的,过时了
    • 已过时?不。他们在过去一个世纪以来一直使用的东西上做得非常好。
    【解决方案4】:
    import java.io.*;
    class ed2
    {
    
    BufferedReader obj = new BufferedReader(new InputStreamReader(System.in));
    
    void encode()throws InterruptedException,IOException
    {
        String rs,ren;
    
        encoder_symbol();
        rs = encode_input();
        ren = encode_find(rs);
        encode_display(ren);
    }
    
    void decode()throws InterruptedException,IOException
    {
        String rs,rde;
    
        decoder_symbol();
        rs = decode_input();
        rde = decode_find(rs);
        decode_display(rde);
    }
    
    void encoder_symbol()throws InterruptedException //just for fun
    {
        System.out.println("********  ***         ***  *********  ************  ******      ********  *****");
        Thread.sleep(100);
        System.out.println("********  ****        ***  *********  ************  ********    ********  *** **");
        Thread.sleep(100);
        System.out.println("***       *****       ***  ***        ***      ***  ***   ***   ***       ***  **");
        Thread.sleep(100);
        System.out.println("***       *** **      ***  ***        ***      ***  ***    ***  ***       *** **");
        Thread.sleep(100);
        System.out.println("******    ***  **     ***  ***        ***      ***  ***    ***  ******    *****");
        Thread.sleep(100);
        System.out.println("******    ***   **    ***  ***        ***      ***  ***    ***  ******    *****");
        Thread.sleep(100);
        System.out.println("***       ***     **  ***  ***        ***      ***  ***    ***  ***       *** **");
        Thread.sleep(100);
        System.out.println("***       ***      ** ***  ***        ***      ***  ***   ***   ***       ***  **");
        Thread.sleep(100);
        System.out.println("*******   ***       *****  *********  ************  ********    ********  ***   **");
        Thread.sleep(100);
        System.out.println("*******   ***        ****  *********  ************  ******      ********  ***    **");
        Thread.sleep(2700);
    
        System.out.println();
        System.out.println();
    }
    
    void decoder_symbol()throws InterruptedException // just for fun
    {
        System.out.println("******      ********  *********  ************  ******      ********  *****");
        Thread.sleep(100);
        System.out.println("********    ********  *********  ************  ********    ********  *** **");
        Thread.sleep(100);
        System.out.println("***   ***   ***       ***        ***      ***  ***   ***   ***       ***  **");
        Thread.sleep(100);
        System.out.println("***    ***  ***       ***        ***      ***  ***    ***  ***       *** **");
        Thread.sleep(100);
        System.out.println("***    ***  ******    ***        ***      ***  ***    ***  ******    *****");
        Thread.sleep(100);
        System.out.println("***    ***  ******    ***        ***      ***  ***    ***  ******    *****");
        Thread.sleep(100);
        System.out.println("***    ***  ***       ***        ***      ***  ***    ***  ***       *** **");
        Thread.sleep(100);
        System.out.println("***   ***   ***       ***        ***      ***  ***   ***   ***       ***  **");
        Thread.sleep(100);
        System.out.println("********    ********  *********  ************  ********    ********  ***   **");
        Thread.sleep(100);
        System.out.println("******      ********  *********  ************  ******      ********  ***    **");
        Thread.sleep(1000);
    
        System.out.println();
        System.out.println();
    }
    
    String encode_input()throws IOException
    {
        String s;
        System.out.println("ENTER THE STRING TO BE ENCODED");
        s = obj.readLine();
        return(s);
    }
    
    String decode_input()throws IOException
    {
        String s;
        System.out.println("ENTER THE CODE TO BE DECODED");
        s = obj.readLine();
        return(s);
    }
    
    String encode_find(String s)//converting the string into its binary equivalent
    {
         int ac,i,j,l,chklen;
         String bc,en="";
         char ic;
         l = s.length();    
         for(i=0;i<l;i++)
         {   
             ic = s.charAt(i); //takes out every character
             bc = ""; 
             ac = (int)ic;  //ASCII value of this character
             while(ac!=0)
             {
                 bc = Integer.toString((ac%2)) + bc; //converting the ASCII value into binary equivalent
                 ac = ac/2;
             }
             chklen = bc.length();//length of the binary equivalent
             if(chklen<7)
             {
                for(j=1;j<=(7-chklen);j++) //increasing the length of binary equivalent so that it becomes equal to 7
                {  
                    bc = "0" + bc;
                }
             }
             en = en+bc; //concatenating all the binary equivalent into one string
         }
         return (en);
    }
    
    String decode_find(String s)// converts binary(i.e. in the form of dots and space) to decimal
    {
        int f;//for the index of every character of code
        long l,i,j,ac;
        char c;
        String de="";
    
        l = s.length();
        f = 0;//index of first caharcter
        for(i=0;i<(l/7);i++)//since the length of every binary equivalent of a character is 7 therefore there will be (length/7) characters in a code of length l
        {
            ac = 0;//intializes the decimal(ASCII) equivalent to zero
            for(j=6;j>=0;j--)//loop will work 7 times for every binary equivalent of a character
            {
                c = s.charAt(f);//takes out every dot or space
                if(c=='.')//it means that c corresponds to 'one'
                {
                    ac = ac + ((int)Math.pow(2,j));//converting binary into decimal(ASCII) equivalent by adding all the powers of 2 which correspond to one('.') 
                }
                f++;//increasing the index for next character of binary equivalent
            }
            de = de + ((char)ac);//converts the ASCII equivalent into character and then concatenates it with the intitial string
        }
        return(de);
    }
    
    void encode_display(String en)//displays the code
    {
        int i,l;
        char ic;
        System.out.println("YOUR ENCODED MESSAGE IS :");
        l=en.length();
        for(i=0;i<l;i++)
        {
            ic=en.charAt(i);
            if(ic=='1')//for every 'one' it will print '.'(dot)
            {
                 System.out.print(".");
            }
            else if(ic=='0')//for every 'zero' it will print ' '(space)
            {
                 System.out.print(" ");
            }
        }
    }
    
    void decode_display(String de)
    {
        System.out.println(de);
    }
    
    public static void main(String args[])throws IOException,InterruptedException
    {
        BufferedReader obj = new BufferedReader(new InputStreamReader(System.in));
    
        char ch;
    
        ed2 ed = new ed2();
    
        System.out.println("PRESS 'E' TO ENCODE A MESSAGE OR PRESS 'D' TO DECODE A MESSAGE");
        ch = (char)obj.read();
    
        if((ch=='e')||(ch=='E'))
        {
            ed.encode();
        }
        else if((ch=='d')||(ch=='D'))
        {
            ed.decode();
        }
    }
    

    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多