Кодирование и декодирование
-
23-09-2019 - |
Вопрос
Я хочу кодировать какой -то текст, который может быть 1 -й шархтер длиной или или 10 000 или бесконечный и декодировать (обратить вспять алгоритм).
Я ищу что-то вроде MD5 на PHP, но обратимое, поскольку MD5 — это один из способов.
Это может быть серверная часть или JavaScript.Если и то и другое, то еще лучше.
Решение
Для сжатия
В Javascript, http://rumkin.com/tools/compression/compress_huff.php
Также взгляните на Сжатие/распаковка текста Javascript
Для шифрования
В 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);
?>
Другие советы
Если вы хотите сжать строку, см. этот вопрос для получения информации о реализации JavaScript LZW, Huffman, LZ77 и других.Я почти уверен, что в PHP есть подобные библиотеки.
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();
}
}
}