精华内容
下载资源
问答
  • enc算法事例命令行

    2011-06-08 00:49:20
    命令行下执行,会将指定的文件或文件夹加密成一个文件,支持通配符。... enc 是主程序。 第一个参数e表示加密,d为解密 第二个参数是密钥。 第三个参数是源路径,支持通配符。解密时是需要解密的文件。
  • openssl 对称加密算法enc命令详解

    千次阅读 2017-12-01 21:36:02
    openssl 对称加密算法enc命令详解 1、对称加密算法概述 openssl的加密算法库提供了丰富的对称加密算法,我们可以通过openssl提供的对称加密算法指令的方式使用,也可以通过调用openssl提供的API的方式使用。...
    openssl 对称加密算法enc命令详解
    

    1、对称加密算法概述

    openssl的加密算法库提供了丰富的对称加密算法,我们可以通过openssl提供的对称加密算法指令的方式使用,也可以通过调用openssl提供的API的方式使用。

    openssl的对称加密算法指令主要用来对数据进行加密和解密处理,openssl基本上为所有其支持的对称加密算法都提供了指令的方式的应用,这些应用指令的名字基本上都是以对称加密算法本身的名字加上位数、加密模式或者其他属性组合而成。例如DES算法的CBC模式,其对应的指令就是des-cbc。可以通过命令查看当前版本的openssl支持的对称加密算法,例如Ubunt14.04 openssl版本及支持对称加密算法指令如下:

    复制代码
    xlzh@cmos:~$ openssl enc -help
    unknown option '-'
    options are
    ...
    /**/
    Cipher Types
    -aes-128-cbc               -aes-128-cbc-hmac-sha1     -aes-128-cfb              
    -aes-128-cfb1              -aes-128-cfb8              -aes-128-ctr              
    -aes-128-ecb               -aes-128-gcm               -aes-128-ofb              
    -aes-128-xts               -aes-192-cbc               -aes-192-cfb              
    -aes-192-cfb1              -aes-192-cfb8              -aes-192-ctr              
    -aes-192-ecb               -aes-192-gcm               -aes-192-ofb              
    -aes-256-cbc               -aes-256-cbc-hmac-sha1     -aes-256-cfb              
    -aes-256-cfb1              -aes-256-cfb8              -aes-256-ctr              
    -aes-256-ecb               -aes-256-gcm               -aes-256-ofb              
    -aes-256-xts               -aes128                    -aes192                   
    -aes256                    -bf                        -bf-cbc                   
    -bf-cfb                    -bf-ecb                    -bf-ofb                   
    -blowfish                  -camellia-128-cbc          -camellia-128-cfb         
    -camellia-128-cfb1         -camellia-128-cfb8         -camellia-128-ecb         
    -camellia-128-ofb          -camellia-192-cbc          -camellia-192-cfb         
    -camellia-192-cfb1         -camellia-192-cfb8         -camellia-192-ecb         
    -camellia-192-ofb          -camellia-256-cbc          -camellia-256-cfb         
    -camellia-256-cfb1         -camellia-256-cfb8         -camellia-256-ecb         
    -camellia-256-ofb          -camellia128               -camellia192              
    -camellia256               -cast                      -cast-cbc                 
    -cast5-cbc                 -cast5-cfb                 -cast5-ecb                
    -cast5-ofb                 -des                       -des-cbc                  
    -des-cfb                   -des-cfb1                  -des-cfb8                 
    -des-ecb                   -des-ede                   -des-ede-cbc              
    -des-ede-cfb               -des-ede-ofb               -des-ede3                 
    -des-ede3-cbc              -des-ede3-cfb              -des-ede3-cfb1            
    -des-ede3-cfb8             -des-ede3-ofb              -des-ofb                  
    -des3                      -desx                      -desx-cbc                 
    -id-aes128-GCM             -id-aes192-GCM             -id-aes256-GCM            
    -rc2                       -rc2-40-cbc                -rc2-64-cbc               
    -rc2-cbc                   -rc2-cfb                   -rc2-ecb                  
    -rc2-ofb                   -rc4                       -rc4-40                   
    -rc4-hmac-md5              -seed                      -seed-cbc                 
    -seed-cfb                  -seed-ecb                  -seed-ofb   
    复制代码

    可以看到上述我们执行的是enc -help命令,enc是什么东西?原来openssl提供了两种方式调用对称加密算法:

    一种就是直接调用对称加密指令,例如:

    openssl des-cbc -in plain.txt -out encrypt.txt -pass pass:12345678

    另外一种是使用enc的方式,即用对称加密指令作为enc指令的参数,例如:.

    openssl enc -des-cbc -in plain.txt -out encrypt.txt -pass pass:12345678

    上述两条指令完成的功能是一样的,而且其参数也是一样。原来enc是作用是什么呢?简单来说,为了省事……。

    openssl提供了N多的对称加密算法指令,enc就是把这些N多的对称的加密算法指令统一集成到enc指令中。当用户使用时,只需使用enc,指定加密算法,就是完成单独的加密算法指令完成的操作。而且,enc中可以指定的对称加密算法指令可能并没有以单独指令的形式存在。所有笔者建议使用enc这种方式。

    当然,虽然openssl为我们提供的对称加密算法指令虽然功能强大,但并不完整,例如对称加密算法不支持76位的RC2加解密或者84位的RC4加解密灯功能。如果想灵活的使用这些加密算法和模式,就需要学习openssl提供的API

    2、对称加密算法指令参数

    可以通过enc的man手册查看enc的详细用法,也可以通过enc -help的方式查看主要参数概要说明,如下

    复制代码
    xlzh@cmos:~$ openssl enc -help
    unknown option '-help'
    options are
    -in <file>     input file
    -out <file>    output file
    -pass <arg>    pass phrase source
    -e             encrypt
    -d             decrypt
    -a/-base64     base64 encode/decode, depending on encryption flag
    -k             passphrase is the next argument
    -kfile         passphrase is the first line of the file argument
    -md            the next argument is the md to use to create a key
                     from a passphrase.  One of md2, md5, sha or sha1
    -S             salt in hex is the next argument
    -K/-iv         key/iv in hex is the next argument
    -[pP]          print the iv/key (then exit if -P)
    -bufsize <n>   buffer size
    -nopad         disable standard block padding
    -engine e      use engine e, possibly a hardware device.
    Cipher Types
    ...
    复制代码

    [in/out]

    这两个参数指定输入文件和输出文件,加密是输入文件是明文,输出文件是密文;解密时输入文件是密文,输出文件是明文。

    [pass]

    指定密码的输入方式,共有五种方式:命令行输入(stdin)、文件输入(file)、环境变量输入(var)、文件描述符输入(fd)、标准输入(stdin)。默认是标准输入,及从键盘输入。

    [e/d]

    e:加密, d:解密  默认是加密

    [-a/-base64]

    由于文件加密后是二进制形式,不方便查看,使用该参数可以使加密后的内容经过base64编码,使其可读;同样,解密时需要先进行base64解编码,然后进行解密操作。

    [-k/-kfile]

    兼容以前版本,指定密码输入方式,现已被pass参数取代

    [md]

    指定密钥生成的摘要算法,用户输入的口令不能直接作为文件加密的密钥,而是经过摘要算法做转换,此参数指定摘要算法,默认md5

    [-S]

    为了增强安全性,在把用户密码转换成加密密钥的时候需要使用盐值,默认盐值随机生成。使用该参数,则盐值由用户指定。也可指用-nosalt指定不使用盐值,但降低了安全性,不推荐使用。

    [K/IV]

    默认文件的加密密钥的Key和IV值是有用户输入的密码经过转化生成的,但也可以由用户自己指定Key/IV值,此时pass参数不起作用

    [pP]

    加上p参数会打印文件密钥Key和IV值,加上P参数也会打印文件密钥Key和IV值,但不进行真正的加解密操作

    [bufsize]

    读写文件的I/O缓存,一般不需要指定

    [-nopad]

    不使用补齐,这就需要输入的数据长度是使用加密算法的分组大小的倍数

    [engine]

    指定三方加密设备,没有环境,暂不实验

    3、对称加密算法使用示例

    1、只对文件进行base64编码,而不使用加解密

    /*对文件进行base64编码*/
    openssl enc -base64 -in plain.txt -out base64.txt
    /*对base64格式文件进行解密操作*/
    openssl enc -base64 -d -in base64.txt -out plain2.txt
    /*使用diff命令查看可知解码前后明文一样*/
    diff plain.txt plain2.txt

    2、不同方式的密码输入方式

    复制代码
    /*命令行输入,密码123456*/
    openssl enc -aes-128-cbc -in plain.txt -out out.txt -pass pass:123456
    /*文件输入,密码123456*/
    echo 123456 > passwd.txt
    openssl enc -aes-128-cbc -in plain.txt -out out.txt -pass file:passwd.txt
    /*环境变量输入,密码123456*/
    passwd=123456
    export passwd
    openssl enc -aes-128-cbc -in plain.txt -out out.txt -pass env:passwd
    /*从文件描述输入*/ 
    openssl enc -aes-128-cbc -in plain.txt -out out.txt -pass fd:1  
    /*从标准输入输入*/ 
    openssl enc -aes-128-cbc -in plain.txt -out out.txt -pass stdin 
    复制代码

    3、固定salt值加密

    复制代码
    xlzh@cmos:~$ openssl enc -aes-128-cbc -in plain.txt -out encrypt.txt -pass pass:123456 -P
    salt=32F5C360F21FC12D
    key=D7E1499A578490DF940D99CAE2E29EB1
    iv =78EEB538897CAF045F807A97F3CFF498
    xlzh@cmos:~$ openssl enc -aes-128-cbc -in plain.txt -out encrypt.txt -pass pass:123456 -P
    salt=DAA482697BECAB46
    key=9FF8A41E4AC011FA84032F14B5B88BAE
    iv =202E38A43573F752CCD294EB8A0583E7
    xlzh@cmos:~$ openssl enc -aes-128-cbc -in plain.txt -out encrypt.txt -pass pass:123456 -P -S 123
    salt=1230000000000000
    key=50E1723DC328D98F133E321FC2908B78
    iv =1528E9AD498FF118AB7ECB3025AD0DC6
    xlzh@cmos:~$ openssl enc -aes-128-cbc -in plain.txt -out encrypt.txt -pass pass:123456 -P -S 123
    salt=1230000000000000
    key=50E1723DC328D98F133E321FC2908B78
    iv =1528E9AD498FF118AB7ECB3025AD0DC6
    xlzh@cmos:~$ 
    复制代码

    可以看到,不使用-S参数,salt参数随机生成,key和iv值也不断变化,当slat值固定时,key和iv值也是固定的。

    4、加解密后过程使用base64编解码

    复制代码
    /*使用-a参数加密后使用base64编码*/
    xlzh@cmos:~$ openssl enc -aes-128-cbc -in plain.txt -a -out encrypt.txt -pass pass:123456
    /*使用-a参数解密前使用base64解码*/
    xlzh@cmos:~$ openssl enc -aes-128-cbc -in encrypt.txt -d -a -out plain1.txt -pass pass:123456
    /*文件一样*/
    xlzh@cmos:~$ diff plain.txt plain1.txt 
    /*加密后文件使用了base64编码*/
    xlzh@cmos:~$ cat encrypt.txt 
    U2FsdGVkX19KbCj9GMI1TBOQjP8JJcefIUH1tHwf/Z4=
    复制代码

     5、手动指定Key和IV值

    复制代码
    /*手动指定key和iv值,salt固定*/
    xlzh@cmos:~$ openssl enc -aes-128-cbc -in plain.txt -out encrypt.txt  -K 1223 -iv f123 -p
    salt=0B00000000000000
    key=12230000000000000000000000000000
    iv =F1230000000000000000000000000000
    /*指定pass密码,不起作用,注意Key和IV值是16进制*/
    xlzh@cmos:~$ openssl enc -aes-128-cbc -in plain.txt -out encrypt.txt  -K 1223 -iv f123 -p -pass pass:123456
    salt=F502F4B8DE62E0E5
    key=12230000000000000000000000000000
    iv =F1230000000000000000000000000000
    复制代码

     

    展开全文
  • 06_openssl 对称加密算法enc命令详解 一.对称加密算法概述 openssl的加密算法库提供了丰富的对称加密算法,我们可以通过openssl提供的对称加密算法指令的方式使用,也可以通过调用openssl提供的API的方式使用。 ...

    06_openssl 对称加密算法enc命令详解

    一.对称加密算法概述

    openssl的加密算法库提供了丰富的对称加密算法,我们可以通过openssl提供的对称加密算法指令的方式使用,也可以通过调用openssl提供的API的方式使用。

    openssl的对称加密算法指令主要用来对数据进行加密和解密处理,openssl基本上为所有其支持的对称加密算法都提供了指令的方式的应用,这些应用指令的名字基本上都是以对称加密算法本身的名字加上位数、加密模式或者其他属性组合而成。例如DES算法的CBC模式,其对应的指令就是des-cbc。可以通过命令查看当前版本的openssl支持的对称加密算法,例如Ubunt14.04 openssl版本及支持对称加密算法指令如下:

    xlzh@cmos:~$ openssl enc -help
    unknown option '-'
    options are
    ...
    /**/
    Cipher Types
    -aes-128-cbc               -aes-128-cbc-hmac-sha1     -aes-128-cfb              
    -aes-128-cfb1              -aes-128-cfb8              -aes-128-ctr              
    -aes-128-ecb               -aes-128-gcm               -aes-128-ofb              
    -aes-128-xts               -aes-192-cbc               -aes-192-cfb              
    -aes-192-cfb1              -aes-192-cfb8              -aes-192-ctr              
    -aes-192-ecb               -aes-192-gcm               -aes-192-ofb              
    -aes-256-cbc               -aes-256-cbc-hmac-sha1     -aes-256-cfb              
    -aes-256-cfb1              -aes-256-cfb8              -aes-256-ctr              
    -aes-256-ecb               -aes-256-gcm               -aes-256-ofb              
    -aes-256-xts               -aes128                    -aes192                   
    -aes256                    -bf                        -bf-cbc                   
    -bf-cfb                    -bf-ecb                    -bf-ofb                   
    -blowfish                  -camellia-128-cbc          -camellia-128-cfb         
    -camellia-128-cfb1         -camellia-128-cfb8         -camellia-128-ecb         
    -camellia-128-ofb          -camellia-192-cbc          -camellia-192-cfb         
    -camellia-192-cfb1         -camellia-192-cfb8         -camellia-192-ecb         
    -camellia-192-ofb          -camellia-256-cbc          -camellia-256-cfb         
    -camellia-256-cfb1         -camellia-256-cfb8         -camellia-256-ecb         
    -camellia-256-ofb          -camellia128               -camellia192              
    -camellia256               -cast                      -cast-cbc                 
    -cast5-cbc                 -cast5-cfb                 -cast5-ecb                
    -cast5-ofb                 -des                       -des-cbc                  
    -des-cfb                   -des-cfb1                  -des-cfb8                 
    -des-ecb                   -des-ede                   -des-ede-cbc              
    -des-ede-cfb               -des-ede-ofb               -des-ede3                 
    -des-ede3-cbc              -des-ede3-cfb              -des-ede3-cfb1            
    -des-ede3-cfb8             -des-ede3-ofb              -des-ofb                  
    -des3                      -desx                      -desx-cbc                 
    -id-aes128-GCM             -id-aes192-GCM             -id-aes256-GCM            
    -rc2                       -rc2-40-cbc                -rc2-64-cbc               
    -rc2-cbc                   -rc2-cfb                   -rc2-ecb                  
    -rc2-ofb                   -rc4                       -rc4-40                   
    -rc4-hmac-md5              -seed                      -seed-cbc                 
    -seed-cfb                  -seed-ecb                  -seed-ofb  
    

    可以看到上述我们执行的是enc -help命令,enc是什么东西?原来openssl提供了两种方式调用对称加密算法:

    一种就是直接调用对称加密指令,例如:

    openssl des-cbc -in plain.txt -out encrypt.txt -pass pass:12345678
    另外一种是使用enc的方式,即用对称加密指令作为enc指令的参数,例如:.

    openssl enc -des-cbc -in plain.txt -out encrypt.txt -pass pass:12345678
    

    上述两条指令完成的功能是一样的,而且其参数也是一样。原来enc是作用是什么呢?简单来说,为了省事……。

    openssl提供了N多的对称加密算法指令,enc就是把这些N多的对称的加密算法指令统一集成到enc指令中。当用户使用时,只需使用enc,指定加密算法,就是完成单独的加密算法指令完成的操作。而且,enc中可以指定的对称加密算法指令可能并没有以单独指令的形式存在。所有笔者建议使用enc这种方式。

    当然,虽然openssl为我们提供的对称加密算法指令虽然功能强大,但并不完整,例如对称加密算法不支持76位的RC2加解密或者84位的RC4加解密灯功能。如果想灵活的使用这些加密算法和模式,就需要学习openssl提供的API

    二.对称加密算法指令参数

    可以通过enc的man手册查看enc的详细用法,也可以通过enc -help的方式查看主要参数概要说明,如下:

    xlzh@cmos:~$ openssl enc -help
    unknown option '-help'
    options are
    -in <file>     input file
    -out <file>    output file
    -pass <arg>    pass phrase source
    -e             encrypt
    -d             decrypt
    -a/-base64     base64 encode/decode, depending on encryption flag
    -k             passphrase is the next argument
    -kfile         passphrase is the first line of the file argument
    -md            the next argument is the md to use to create a key
                     from a passphrase.  One of md2, md5, sha or sha1
    -S             salt in hex is the next argument
    -K/-iv         key/iv in hex is the next argument
    -[pP]          print the iv/key (then exit if -P)
    -bufsize <n>   buffer size
    -nopad         disable standard block padding
    -engine e      use engine e, possibly a hardware device.
    Cipher Types
    ...
    

    1.[in/out]

    这两个参数指定输入文件和输出文件,加密是输入文件是明文,输出文件是密文;解密时输入文件是密文,输出文件是明文。

    2.[pass]

    指定密码的输入方式,共有五种方式:命令行输入(stdin)、文件输入(file)、环境变量输入(var)、文件描述符输入(fd)、标准输入(stdin)。默认是标准输入,及从键盘输入。

    3.[e/d]

    e:加密, d:解密 默认是加密

    4.[-a/-base64]

    由于文件加密后是二进制形式,不方便查看,使用该参数可以使加密后的内容经过base64编码,使其可读;同样,解密时需要先进行base64解编码,然后进行解密操作。

    5.[-k/-kfile]

    兼容以前版本,指定密码输入方式,现已被pass参数取代

    6.[md]

    指定密钥生成的摘要算法,用户输入的口令不能直接作为文件加密的密钥,而是经过摘要算法做转换,此参数指定摘要算法,默认md5

    7.[-S]

    为了增强安全性,在把用户密码转换成加密密钥的时候需要使用盐值,默认盐值随机生成。使用该参数,则盐值由用户指定。也可指用-nosalt指定不使用盐值,但降低了安全性,不推荐使用。

    8.[K/IV]

    默认文件的加密密钥的Key和IV值是有用户输入的密码经过转化生成的,但也可以由用户自己指定Key/IV值,此时pass参数不起作用

    9.[pP]

    加上p参数会打印文件密钥Key和IV值,加上P参数也会打印文件密钥Key和IV值,但不进行真正的加解密操作

    10.[bufsize]

    读写文件的I/O缓存,一般不需要指定

    11.[-nopad]

    不使用补齐,这就需要输入的数据长度是使用加密算法的分组大小的倍数

    12.[engine]

    指定三方加密设备,没有环境,暂不实验

    三.对称加密算法使用示例

    1.只对文件进行base64编码,而不使用加解密

    /对文件进行base64编码/
    openssl enc -base64 -in plain.txt -out base64.txt

    /对base64格式文件进行解密操作/
    openssl enc -base64 -d -in base64.txt -out plain2.txt

    /使用diff命令查看可知解码前后明文一样/
    diff plain.txt plain2.txt

    2.不同方式的密码输入方式

    /命令行输入,密码123456/

    openssl enc -aes-128-cbc -in plain.txt -out out.txt -pass pass:123456
    

    /文件输入,密码123456/

    echo 123456 > passwd.txt
    openssl enc -aes-128-cbc -in plain.txt -out out.txt -pass file:passwd.txt
    

    /环境变量输入,密码123456/

    passwd=123456
    export passwd
    openssl enc -aes-128-cbc -in plain.txt -out out.txt -pass env:passwd
    

    /从文件描述输入
    openssl enc -aes-128-cbc -in plain.txt -out out.txt -pass fd:1

    /从标准输入输入
    openssl enc -aes-128-cbc -in plain.txt -out out.txt -pass stdin

    3.固定salt值加密

    xlzh@cmos:~$ openssl enc -aes-128-cbc -in plain.txt -out encrypt.txt -pass pass:123456 -P
    salt=32F5C360F21FC12D
    key=D7E1499A578490DF940D99CAE2E29EB1
    iv =78EEB538897CAF045F807A97F3CFF498
    xlzh@cmos:~$ openssl enc -aes-128-cbc -in plain.txt -out encrypt.txt -pass pass:123456 -P
    salt=DAA482697BECAB46
    key=9FF8A41E4AC011FA84032F14B5B88BAE
    iv =202E38A43573F752CCD294EB8A0583E7
    xlzh@cmos:~$ openssl enc -aes-128-cbc -in plain.txt -out encrypt.txt -pass pass:123456 -P -S 123
    salt=1230000000000000
    key=50E1723DC328D98F133E321FC2908B78
    iv =1528E9AD498FF118AB7ECB3025AD0DC6
    xlzh@cmos:~$ openssl enc -aes-128-cbc -in plain.txt -out encrypt.txt -pass pass:123456 -P -S 123
    salt=1230000000000000
    key=50E1723DC328D98F133E321FC2908B78
    iv =1528E9AD498FF118AB7ECB3025AD0DC6
    xlzh@cmos:~$ 
    

    可以看到,不使用-S参数,salt参数随机生成,key和iv值也不断变化,当slat值固定时,key和iv值也是固定的。

    4.加解密后过程使用base64编解码

    /使用-a参数加密后使用base64编码/

    xlzh@cmos:~$ openssl enc -aes-128-cbc -in plain.txt -a -out encrypt.txt -pass pass:123456
    

    /使用-a参数解密前使用base64解码/

    xlzh@cmos:~$ openssl enc -aes-128-cbc -in encrypt.txt -d -a -out plain1.txt -pass pass:123456
    

    /文件一样/
    xlzh@cmos:~$ diff plain.txt plain1.txt

    /加密后文件使用了base64编码/

    xlzh@cmos:~$ cat encrypt.txt 
    U2FsdGVkX19KbCj9GMI1TBOQjP8JJcefIUH1tHwf/Z4=
    

    5.手动指定Key和IV值

    /手动指定key和iv值,salt固定/

    xlzh@cmos:~$ openssl enc -aes-128-cbc -in plain.txt -out encrypt.txt  -K 1223 -iv f123 -p
    salt=0B00000000000000
    key=12230000000000000000000000000000
    iv =F1230000000000000000000000000000
    

    /指定pass密码,不起作用,注意Key和IV值是16进制/

    xlzh@cmos:~$ openssl enc -aes-128-cbc -in plain.txt -out encrypt.txt  -K 1223 -iv f123 -p -pass pass:123456
    salt=F502F4B8DE62E0E5
    key=12230000000000000000000000000000
    iv =F1230000000000000000000000000000
    

     

    展开全文
  • enc

    2016-10-26 15:15:00
    enc 【问题背景】 zhx 和他的妹子聊天。 【问题描述】 考虑一种简单的加密算法。 假定所有句子都由小写英文字母构成,对于每一个字母,我们将它唯一地映射到另一个字母。例如考虑映射规则: a->b, b->c, c->...

    enc
    【问题背景】
    zhx 和他的妹子聊天。
    【问题描述】
    考虑一种简单的加密算法。
    假定所有句子都由小写英文字母构成,对于每一个字母,我们将它唯一地映
    射到另一个字母。例如考虑映射规则:
    a->b, b->c, c->d, d->a. 那么单词 bad 就会被映射为 cba。这个映射规则的“逆
    映射规则”为:b->a, c->b, d->c, a->d。对于密文 cba,我们很容易将它解密为 bad。
    当然,这样的映射需要保证每一个字母映射到的字母是不同的(即不可以出
    现两个不同的字母映射到同一个字母,否则将会无法解密)。
    一种常见的密码攻击方式被称为已知明文攻击。具体地,在你不知道映射表
    的情况下,给你一段明文和对应的密文,你可以推导出一些的映射规则,下一次
    你收到一条密文,你就可能可以解密它。现在你需要完成这样的一个系统。
    【输入格式】
    第一行包含一个字符串,仅包含小写字母,表示一段明文。
    第二行包含一个字符串,仅包含小写字母,表示这段明文对应的密文,保证
    两行长度相同。
    第三行包含一个字符串,仅包含小写字母,表示你需要解密的密文。
    【输出格式】
    输出共一行,表示输入中第三行密文对应的明文。如果不能解密,输出
    “ERROR”(不包含引号)。注意输入可能出现不自恰的情况。
    【样例输入】
    ab
    cc
    cc
    【样例输出】
    ERROR
    【样例输入】
    ab
    ab P69 enc
    第 3 页 共 6 页
    c
    【样例输出】
    ERROR
    【样例输入】
    abcde
    bcdea
    cad
    【样例输出】
    bec

    【数据范围与规定】
    对于100%的数据,所有字符串长度<=1000。

     

     

    //代码丑的被JustPenz233狂吐槽 
    #include<cstdio>
    #include<cstring>
    #include<iostream>
    using namespace std;
    char a[1001],b[1001],c[1001];
    int len1,len2;
    bool flag=0;
    int zh[30];
    void zhuanhuan()
    {
        memset(zh,0,sizeof(zh));
        int x,y;
        for(int i=1;i<=len1;i++)
        {
            x=b[i]-'a'+1;
            y=a[i]-'a'+1;
            if(zh[x]==0)
                zh[x]=y;
            else if(zh[x]!=y)// 这里flag为1,只有当x在前面出现过并且他之前所对应的明文与此次出现的明文不相同时 
                flag=1;
        }
        int cnt=0;//这个点很神,当25个字母全都对应之后,剩下的两个一定匹配。 
        if(flag==0)
        {
            for(int i=1;i<=26;i++)
                if(zh[i]!=0)
                    cnt++;
            if(cnt==25)
                for(int i=1;i<=26;i++)
                    if(zh[i]==0)
                      for(int k=1;k<=26;k++)
                      {
                          bool flag=0;
                          for(int j=1;j<=len1;j++)
                        {
                            if(a[j]-'a'+1==k) flag=1;
                            if(flag==0&&j==len1)
                            {
                                zh[i]=k;
                                return ;
                                }    
                        }
                      }
        }
    }
    int main()
    {
        freopen("enc.in","r",stdin);
        freopen("enc.ans","w",stdout);
        scanf("%s",a+1);
        scanf("%s",b+1);
        scanf("%s",c+1);
        len1=strlen(a+1);
        len2=strlen(c+1);
        zhuanhuan();
        if(flag==1)
            printf("ERROR");
        else
        {
            for(int i=1;i<=len2;i++)
            {
                int x=c[i]-'a'+1;
                if(zh[x]==0)
                {
                    printf("ERROR");
                    break;
                }
                else
                {
                    char p;
                    p=zh[x]-1+'a';
                    printf("%c",p);
                }
            }
        }
        fclose(stdin);fclose(stdout);
        return 0;
    }

     

    转载于:https://www.cnblogs.com/xiaoningmeng/p/6000501.html

    展开全文
  • HmacSHA1 enc.Base64 1. 需解密对象 “oauth_signature” 字段 2. 定位到 java 关键函数 搜索关键字 “oauth_signature” public static final String ...

    记一次学习过程,需求解密"sign"字段 得到其算法

    • com.mfw.roadbook 马蜂窝旅游

    • so层 算法

      • HmacSHA1 enc.Base64

    1. 需解密对象

    1. “oauth_signature” 字段

    在这里插入图片描述

    2. 定位到 java 关键函数

    1. 搜索关键字 “oauth_signature”
        public static final String HTTP_BASE_PARAM_OAUTH_SIGNATURE = "oauth_signature";
    
    1. HTTP_BASE_PARAM_OAUTH_SIGNATURE 查找用例

    2. 一步一步查找到 oauthSignTxt 这个方法

    在这里插入图片描述

    3. firda hook java

    1. hook 关键函数
    2. 主动调用

    在这里插入图片描述

    4. firda hook so

    1. Exports Java_com_mfw_tnative_AuthorizeHelper_xAuthencode 000090E8
    2. 进去 F5 一目了然 ,没有被处理过的c++代码 ,一点一点的拆分就行

    在这里插入图片描述
    在这里插入图片描述

    5. hook.js代码

    console.log("--------------------");
    console.log("com.mfw.roadbook"); // 马蜂窝旅游
    console.log("start...");
    // hook_java();
    hook_so();
    console.log("end...");
    console.log("--------------------");
    
    
    
    
    function showStacks() {
        console.log(Java.use("android.util.Log").getStackTraceString(Java.use("java.lang.Exception").$new()));
    }
    
    function hook_java() {
        Java.perform(function () {
            var AuthorizeHelper = Java.use("com.mfw.tnative.AuthorizeHelper");
            AuthorizeHelper.xAuthencode.implementation = function (context, source, key, packageName, isLogin) {
                //showStacks();
                console.log("xAuthencode context: ", context);
                console.log("xAuthencode source: ", source);
                console.log("xAuthencode key: ", key);
                console.log("xAuthencode packageName: ", packageName);
                console.log("xAuthencode isLogin: ", isLogin);
                var retval = this.xAuthencode(context, source, key, packageName, isLogin);
                console.log("xAuthencode retval: ", retval);
                return retval;
            }
    
        });
    }
    
    function call_java() {
        Java.perform(function () {
            var currentApplication = Java.use("android.app.ActivityThread").currentApplication();
            var context = currentApplication.getApplicationContext();
            var AuthorizeHelper = Java.use("com.mfw.tnative.AuthorizeHelper");
            var xAuthencode = AuthorizeHelper.$new("com.mfw.roadbook").xAuthencode(context,
                'PUT&https%3A%2F%2Fmapi.mafengwo.cn%2Frest%2Fapp%2Fuser%2Flogin%2F&after_style%3Ddefault%26app_code%3Dcom.mfw.roadbook%26app_ver%3D8.1.6%26app_version_code%3D535%26brand%3DXiaomi%26channel_id%3DGROWTH-WAP-LC-3%26device_id%3DF4%253AF5%253ADB%253A23%253A63%253A06%26device_type%3Dandroid%26hardware_model%3DMI%25205X%26mfwsdk_ver%3D20140507%26o_lat%3D30.458106%26o_lng%3D114.876373%26oauth_consumer_key%3D5%26oauth_nonce%3Dc0847f2b-b284-4bcf-b823-8d19be79b6cb%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1621266286%26oauth_version%3D1.0%26open_udid%3DF4%253AF5%253ADB%253A23%253A63%253A06%26put_style%3Ddefault%26screen_height%3D1920%26screen_scale%3D3.0%26screen_width%3D1080%26sys_ver%3D8.1.0%26time_offset%3D480%26x_auth_mode%3Dclient_auth%26x_auth_password%3D333333%26x_auth_username%3D13333333333',
                '',
                'com.mfw.roadbook',
                true);
            // E7yazoGTHlhhoEUcRY9ukGK/nJ8=
            console.log("call_java xAuthencode: ", xAuthencode);
        });
    }
    
    function hook_so() {
        // mfw::Sha1::CHmac::SetKey
        var SetKey = Module.findExportByName("libmfw.so", '_ZN3mfw4Sha15CHmac6SetKeyEPKhj');
        console.log("SetKey Addr : ", SetKey);
        Interceptor.attach(SetKey, {
            onEnter: function (args) {
                // console.log("SetKey onEnter args[0]: ", (args[0])); // 指针 上下文
                console.log("SetKey onEnter args[1]: ", ptr(args[1]).readCString()); // 指针 密钥
                console.log("SetKey onEnter args[2]: ", ptr(args[2]).toInt32());     // 指针 长度
                // console.log("SetKey onEnter args[0]: \n", hexdump(args[0]));
                // console.log("SetKey onEnter args[0]: ", ptr(args[0]).readCString());
            },
            onLeave: function (retval) {
                // console.log("SetKey onLeave retval: ", (retval)); // 无返回值
                // console.log("SetKey onEnter retval: ", ptr(retval).toInt32()); // 指针
            }
        });
    
        // mfw::Sha1::CHmac::Update
        var Update = Module.findExportByName("libmfw.so", '_ZN3mfw4Sha15CHmac6UpdateEPKhj');
        console.log("Update Addr : ", Update);
        Interceptor.attach(Update, {
            onEnter: function (args) {
                // console.log("Update onEnter args[0]: ", (args[0])); // 指针 上下文
                console.log("Update onEnter args[1]: ", ptr(args[1]).readCString()); // 指针 参数
                console.log("Update onEnter args[2]: ", ptr(args[2]).toInt32());     // 指针 长度
                // console.log("SetKey onEnter args[0]: \n", hexdump(args[0]));
                // console.log("SetKey onEnter args[0]: ", ptr(args[0]).readCString());
            },
            onLeave: function (retval) {
                // console.log("Update onLeave retval: ", (retval)); // 无返回值
                // console.log("Update onEnter retval: ", ptr(retval).toInt32()); // 指针
            }
        });
    
        // mfw::Sha1::CHmac::Final
        var Final = Module.findExportByName("libmfw.so", '_ZN3mfw4Sha15CHmac5FinalEPhj');
        console.log("Final Addr : ", Final);
        Interceptor.attach(Final, {
            onEnter: function (args) {
                // console.log("Final onEnter args[0]: ", (args[0]));                // 指针 上下文
                // console.log("Final onEnter args[1]: ", ptr(args[1]));             // 指针 这是个返回值
                console.log("Final onEnter args[2]: ", ptr(args[2]).toInt32());      // 指针 长度
                // console.log("SetKey onEnter args[0]: \n", hexdump(args[0]));
                this.args1 = args[1];
            },
            onLeave: function (retval) {
                // console.log("Final onLeave retval: ", (retval));                  // 无返回值
                // console.log("Final onEnter retval: ", ptr(retval).toInt32());     // 指针
                console.log("Final onLeave this.arg1: \n", hexdump(this.args1, { length: 20 }));
            }
        });
    }
    
    展开全文
  • 这是一种使用Bitxor的简单加密算法(SBE-Simple_Bitxor_Encryption)。 注意:如果您在系统或项目中使用我的代码,则应始终引用我的论文作为参考 这是供初学者练习matlab代码的简单图像加密代码。 Functions: Main ...
  • Openssl enc命令

    2015-07-21 21:58:00
    算法有流算法和分组加密算法,流算法是逐字节加,由于其容易被破译,现在已很少使用;分组加密算法是将数据分成固定大小的组里,然后逐组进行加密,如DES。分组算法中又有ECB,CBC,CFB,OFB,CTR等工作模式,其中默认...
  • dvi_enc-开源

    2021-04-28 03:30:34
    dvi_enc是DVI编码器算法到Xilinx Spartan3A FPGA的实现示例。 它是由Verilog HDL编写的。 并且,该实现支持XGA视频模式。
  • openssl enc 加解密

    2019-10-06 15:13:38
    enc - 对称加密例程,使用对称密钥对数据进行加解密,特点是速度快,能对大量数据进行处理。算法有流算法和分组加密算法,流算法是逐字节加密,数据经典算法,但由于其容易被破译,现在已很少使用;分组加密算法是将...
  • 恩科 简单快速的加密包装器,用于编码/解码,加密/解密和具有字符串。 介绍 编码/解码(使用键或base64)或散列字符串的惯用... 让我们使用aes192算法进行加密 var encrypted_str = Enc . aes192 . encode ( 'test' ,
  • OpenSSL命令---enc

    2017-08-01 18:20:35
    转自 : http://blog.csdn.net/as3luyuan123/article/details/14411039 ...对称加密算法工具。它能够运用块或者流算法对数据加/解密。还能够把加密/接密,还可以把结果进行base64编码。...openssl enc 
  • ENC文件解密工具(EA-Key)用于解密ENC文件,输入密码后可以通过这个软件进行...由于EA-KEY3.1采用的是AES256位加密算法对文件进行加密,当需要加密的文件比较大时,加密时间可能会长一些。 ENC文件解密工具(EA-Key)截图
  • noip模拟赛 enc

    2017-10-26 13:01:00
    【问题描述】考虑一种简单的加密算法。假定所有句子都由小写英文字母构成, 对于每一个字母, 我们将它唯一地映射到另一个字母。 例如考虑映射规则:a->b, b->c, c->d, d->a. 那么单词 bad 就会被映射为...
  • 加密算法知识点

    2017-12-14 20:22:27
    这里介绍下enc指令的作用,OpenSSL提供了很多的对称加密算法指令,enc就是把这些加密算法指令统一集成到enc指令中。当用户使用时,只需使用enc,指定加密算法,就是完成了单独的加密算法指令完成的操...
  • SM4国密对称算法源码解析

    万次阅读 多人点赞 2018-10-11 15:22:49
    最近在研究国密算法,主要分为:SM2、SM3、SM4。其中SM2为非对称加密算法,SM3为哈希摘要算法...void sm4_setkey_enc( sm4_context *ctx, unsigned char key[16] ); void sm4_setkey_dec( sm4_context *ctx, unsigne...
  • 加密算法简介

    2019-08-13 09:56:21
    对称加密算法(私钥密码体系) 非对称加密算法(公钥密码体系) 不可逆算法 对称加密算法 简介 数据加密和解密都是同一个密钥,安全性依赖于所持有的密钥 原理 A将明文,与钥匙K,利用算法S生成密码M ...DES( Data Enc...
  • 07.对称加密算法指令

    2018-02-01 19:13:00
    7.1. enc指令例子:enc -des-cbc-in pln.txt ...对称加密算法指令种类算法描述enc指令参数AES算法128-CBC-ase-128-cbcAES算法128-CFB-aes-128-cfbAES算法128-ECB-aes-128-ecbAES算法128-OFB-aes-128-ofbAES算法...

空空如也

空空如也

1 2 3 4 5 ... 17
收藏数 324
精华内容 129
关键字:

enc算法