zoukankan      html  css  js  c++  java
  • openssl enc(对称加密)

    对称加密工具。了解对称加密的原理后就很简单了,原理部分见下文。

    openssl enc -ciphername [-in filename] [-out filename] [-pass arg] [-e] [-d] [-a/-base64] [-k password] [-S salt] [-salt] [-md] [-p/-P]
    
    选项说明:
    
    -ciphername:指定对称加密算法(如des3),可独立于enc直接使用,如openssl des3或openssl enc -des3。推荐在enc后使用,这样不依赖于硬件
    
    -in filename :输入文件,不指定时默认是stdin
    
    -out filename:输出文件,不指定时默认是stdout
    
    -e:对输入文件加密操作,不指定时默认就是该选项
    
    -d:对输入文件解密操作,只有显示指定该选项才是解密
    
    -pass:传递加、解密时的明文密码。若验证签名时实用的公钥或私钥文件是被加密过的,则需要传递密码来解密。密码的格式见"openssl 密码格式"
    
    -k     :已被"-pass"替代,现在还保留是为了兼容老版本的openssl
    
    -base64:在加密后和解密前进行base64编码或解密,不指定时默认是二进制。注意,编码不是加解密的一部分,而是加解密前后对数据的格式"整理"
    
    -a:等价于-base64
    
    -salt:单向加密时使用salt复杂化单向加密的结果,此为默认选项,且使用随机salt值
    
    -S salt:不使用随机salt值,而是自定义salt值,但只能是16进制范围内字符的组合,即"0-9a-fA-F"的任意一个或多个组合
    
    -p:打印加解密时salt值、key值和IV初始化向量值(也是复杂化加密的一种方式),解密时还输出解密结果,见后文示例
    
    -P:和-p选项作用相同,但是打印时直接退出工具,不进行加密或解密操作
    
    -md:指定单向加密算法,默认md5。该算法是拿来加密key部分的,见后文分析。

    支持的单向加密算法有:

    -md4            to use the md4 message digest algorithm
    -md5            to use the md5 message digest algorithm
    -ripemd160      to use the ripemd160 message digest algorithm
    -sha            to use the sha message digest algorithm
    -sha1           to use the sha1 message digest algorithm
    -sha224         to use the sha224 message digest algorithm
    -sha256         to use the sha256 message digest algorithm
    -sha384         to use the sha384 message digest algorithm
    -sha512         to use the sha512 message digest algorithm
    -whirlpool      to use the whirlpool message digest algorithm

    支持的对称加密算法有:

    -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-aes128-wrap            -id-aes128-wrap-pad      
    -id-aes192-GCM             -id-aes192-wrap            -id-aes192-wrap-pad      
    -id-aes256-GCM             -id-aes256-wrap            -id-aes256-wrap-pad      
    -id-smime-alg-CMS3DESwrap  -idea                      -idea-cbc                 
    -idea-cfb                  -idea-ecb                  -idea-ofb                
    -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

    在给出openssl enc命令用法示例之前,先解释下对称加密和解密的原理和过程。

    对称加解密时,它们使用的密码是完全相同的,例如"123456",但这是密码,且是明文密码,非常不安全,所以应该对此简单密码进行复杂化。最直接的方法是使用单向加密计算出明文密码的hash值,单向加密后新生成的密码已经比较安全(称之为密钥比较好),可以作为对称加密时的对称密钥。另外,由于同一单向加密算法对相同明文密码的计算结果是完全一致的,这样解密时使用相同的单向加密算法就能计算出完全相同的密钥,也就是解密时的对称密钥。如果想要更安全,还可以在对称加密后对加密文件进行重新编码,如使用"base64"、二进制或hex编码方式进行编码,但对应的在解密前就需要先解码,解码后才能解密。

    所以,将对称加、解密的机制简单概括如下:

    对称加密机制:根据指定的单向加密算法,对输入的明文密码进行单向加密(默认是md5),得到固定长度的加密密钥,即对称密钥,再根据指定的对称加密算法,使用对称密钥加密文件,最后重新编码加密后的文件。即单向加密明文密码结果作为对称密钥、使用对称密钥加密文件、对文件重新编码。

    对称解密机制:先解码文件,再根据单向加密算法对解密时输入的明文密码计算得到对称密钥,依此对称密钥对称解密解码后的文件。

    因此,解密过程中使用的解码方式、单向加密和对称加密算法都必须一致,且输入的密码必须是正确密码。但需要注意的一点是,解密时可以不指定salt,因为加密时使用的salt会记录下来,解密时可以读取该salt。

    如下图所示,分别是加密和解密过程示意图。

     

    示例:

    以加密/etc/fstab的备份文件/tmp/test.txt为例。

    (1).首先测试openssl enc的编码功能。由于未指定密码选项"-k"或"-pass",所以仅仅只进行编码而不进行加密,因此也不会提示输入密码。

    [root@docker-01 ~]# openssl enc -a -in anaconda-ks.cfg -out test_base64.txt
    [root@docker-01 ~]# cat test_base64.txt 
    I3ZlcnNpb249REVWRUwKIyBTeXN0ZW0gYXV0aG9yaXphdGlvbiBpbmZvcm1hdGlv
    bgphdXRoIC0tZW5hYmxlc2hhZG93IC0tcGFzc2FsZ289c2hhNTEyCiMgVXNlIENE
    Uk9NIGluc3RhbGxhdGlvbiBtZWRpYQpjZHJvbQojIFVzZSBncmFwaGljYWwgaW5z
    dGFsbApncmFwaGljYWwKIyBSdW4gdGhlIFNldHVwIEFnZW50IG9uIGZpcnN0IGJv
    b3QKZmlyc3Rib290IC0tZW5hYmxlCmlnbm9yZWRpc2sgLS1vbmx5LXVzZT1zZGEK
    IyBLZXlib2FyZCBsYXlvdXRzCmtleWJvYXJkIC0tdmNrZXltYXA9Y24gLS14bGF5
    b3V0cz0nY24nCiMgU3lzdGVtIGxhbmd1YWdlCmxhbmcgemhfQ04uVVRGLTgKCiMg
    TmV0d29yayBpbmZvcm1hdGlvbgpuZXR3b3JrICAtLWJvb3Rwcm90bz1kaGNwIC0t
    ZGV2aWNlPWVuczMzIC0tb25ib290PW9mZiAtLWlwdjY9YXV0byAtLW5vLWFjdGl2
    YXRlCm5ldHdvcmsgIC0taG9zdG5hbWU9bG9jYWxob3N0LmxvY2FsZG9tYWluCgoj
    IFJvb3QgcGFzc3dvcmQKcm9vdHB3IC0taXNjcnlwdGVkICQ2JHE1NkZPSktVVXBT
    QUNSVGYkL3p6TThKTFhkL3hlSmdKbjI3cWZOVTlhNTJxelBFQ1dyejQvOTBJcGRD
    WjN3SE5ERGtuSkNRcWhMd3Y2WVI3bFVsMnFXaHlwVXcuWEdjQnptZHBadDEKIyBT
    eXN0ZW0gc2VydmljZXMKc2VydmljZXMgLS1lbmFibGVkPSJjaHJvbnlkIgojIFN5
    c3RlbSB0aW1lem9uZQp0aW1lem9uZSBBc2lhL1NoYW5naGFpIC0taXNVdGMKIyBT
    eXN0ZW0gYm9vdGxvYWRlciBjb25maWd1cmF0aW9uCmJvb3Rsb2FkZXIgLS1hcHBl
    bmQ9IiBjcmFzaGtlcm5lbD1hdXRvIiAtLWxvY2F0aW9uPW1iciAtLWJvb3QtZHJp
    dmU9c2RhCiMgUGFydGl0aW9uIGNsZWFyaW5nIGluZm9ybWF0aW9uCmNsZWFycGFy
    dCAtLW5vbmUgLS1pbml0bGFiZWwKIyBEaXNrIHBhcnRpdGlvbmluZyBpbmZvcm1h
    dGlvbgpwYXJ0IC9ib290IC0tZnN0eXBlPSJ4ZnMiIC0tb25kaXNrPXNkYSAtLXNp
    emU9MjUwCnBhcnQgcHYuMjUzIC0tZnN0eXBlPSJsdm1wdiIgLS1vbmRpc2s9c2Rh
    IC0tc2l6ZT0yMDIyOQp2b2xncm91cCBjZW50b3MgLS1wZXNpemU9NDA5NiBwdi4y
    NTMKbG9ndm9sIHN3YXAgIC0tZnN0eXBlPSJzd2FwIiAtLXNpemU9MTAwMCAtLW5h
    bWU9c3dhcCAtLXZnbmFtZT1jZW50b3MKbG9ndm9sIC8gIC0tZnN0eXBlPSJ4ZnMi
    IC0tc2l6ZT0xOTIyNSAtLW5hbWU9cm9vdCAtLXZnbmFtZT1jZW50b3MKCiVwYWNr
    YWdlcwpAXm1pbmltYWwKQGNvcmUKY2hyb255CmtleGVjLXRvb2xzCgolZW5kCgol
    YWRkb24gY29tX3JlZGhhdF9rZHVtcCAtLWVuYWJsZSAtLXJlc2VydmUtbWI9J2F1
    dG8nCgolZW5kCgolYW5hY29uZGEKcHdwb2xpY3kgcm9vdCAtLW1pbmxlbj02IC0t
    bWlucXVhbGl0eT0xIC0tbm90c3RyaWN0IC0tbm9jaGFuZ2VzIC0tbm90ZW1wdHkK
    cHdwb2xpY3kgdXNlciAtLW1pbmxlbj02IC0tbWlucXVhbGl0eT0xIC0tbm90c3Ry
    aWN0IC0tbm9jaGFuZ2VzIC0tZW1wdHlvawpwd3BvbGljeSBsdWtzIC0tbWlubGVu
    PTYgLS1taW5xdWFsaXR5PTEgLS1ub3RzdHJpY3QgLS1ub2NoYW5nZXMgLS1ub3Rl
    bXB0eQolZW5kCg==

    再以base64格式进行解码。

    [root@docker-01 ~]# openssl enc -a -d -in test_base64.txt  
    #version=DEVEL
    # System authorization information
    auth --enableshadow --passalgo=sha512
    # Use CDROM installation media
    cdrom
    # Use graphical install
    graphical
    # Run the Setup Agent on first boot
    firstboot --enable
    ignoredisk --only-use=sda
    # Keyboard layouts
    keyboard --vckeymap=cn --xlayouts='cn'
    # System language
    lang zh_CN.UTF-8
    
    # Network information
    network  --bootproto=dhcp --device=ens33 --onboot=off --ipv6=auto --no-activate
    network  --hostname=localhost.localdomain
    
    # Root password
    rootpw --iscrypted $6$q56FOJKUUpSACRTf$/zzM8JLXd/xeJgJn27qfNU9a52qzPECWrz4/90IpdCZ3wHNDDknJCQqhLwv6YR7lUl2qWhypUw.XGcBzmdpZt1
    # System services
    services --enabled="chronyd"
    # System timezone
    timezone Asia/Shanghai --isUtc
    # System bootloader configuration
    bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda
    # Partition clearing information
    clearpart --none --initlabel
    # Disk partitioning information
    part /boot --fstype="xfs" --ondisk=sda --size=250
    part pv.253 --fstype="lvmpv" --ondisk=sda --size=20229
    volgroup centos --pesize=4096 pv.253
    logvol swap  --fstype="swap" --size=1000 --name=swap --vgname=centos
    logvol /  --fstype="xfs" --size=19225 --name=root --vgname=centos
    
    %packages
    @^minimal
    @core
    chrony
    kexec-tools
    
    %end
    
    %addon com_redhat_kdump --enable --reserve-mb='auto'
    
    %end
    
    %anaconda
    pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
    pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
    pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty
    %end
    [root@docker-01 ~]# 

    实际上,上述编码和解码的过程严格地说也是对称加密和解密,因为openssl enc默认会带上加密选项"-e",只不过因为没有指定输入密码选项,使用的加密密码为空而已,且单向加密算法使用的也是默认值。解密时也一样。

    (2).测试使用des3对称加密算法加密test.txt文件。

    [root@docker-01 ~]# openssl enc -a -des3 -in anaconda-ks.cfg -out test.1 -pass pass:123456 -md md5
    [root@docker-01 ~]# cat test.1
    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

    解密文件test.1。

    [root@docker-01 ~]# openssl enc -a -des3 -d -in test.1 -out test.2 -pass pass:123456 -md md5 
    [root@docker-01 ~]# cat test.2
    #version=DEVEL
    # System authorization information
    auth --enableshadow --passalgo=sha512
    # Use CDROM installation media
    cdrom
    # Use graphical install
    graphical
    # Run the Setup Agent on first boot
    firstboot --enable
    ignoredisk --only-use=sda
    # Keyboard layouts
    keyboard --vckeymap=cn --xlayouts='cn'
    # System language
    lang zh_CN.UTF-8
    
    # Network information
    network  --bootproto=dhcp --device=ens33 --onboot=off --ipv6=auto --no-activate
    network  --hostname=localhost.localdomain
    
    # Root password
    rootpw --iscrypted $6$q56FOJKUUpSACRTf$/zzM8JLXd/xeJgJn27qfNU9a52qzPECWrz4/90IpdCZ3wHNDDknJCQqhLwv6YR7lUl2qWhypUw.XGcBzmdpZt1
    # System services
    services --enabled="chronyd"
    # System timezone
    timezone Asia/Shanghai --isUtc
    # System bootloader configuration
    bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda
    # Partition clearing information
    clearpart --none --initlabel
    # Disk partitioning information
    part /boot --fstype="xfs" --ondisk=sda --size=250
    part pv.253 --fstype="lvmpv" --ondisk=sda --size=20229
    volgroup centos --pesize=4096 pv.253
    logvol swap  --fstype="swap" --size=1000 --name=swap --vgname=centos
    logvol /  --fstype="xfs" --size=19225 --name=root --vgname=centos
    
    %packages
    @^minimal
    @core
    chrony
    kexec-tools
    
    %end
    
    %addon com_redhat_kdump --enable --reserve-mb='auto'
    
    %end
    
    %anaconda
    pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
    pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
    pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty
    %end
    [root@docker-01 ~]# 

    (3).加密时带上点盐salt。其实不写时默认就已经加入了,只不过是加入随机盐值。使用-S可以指定明确要使用的盐的值。但是盐的值只能是16进制范围内字符的组合,即"0-9a-fA-F"的任意一个或多个组合。

    [root@docker-01 ~]# openssl enc -a -des3 -S 'Fabc' -in anaconda-ks.cfg -out test.1 -pass pass:123456 -md md5 

    解密。解密时不用指定salt值,即使指定了也不会影响解密结果。 

    [root@docker-01 ~]# openssl enc -a -des3 -d -in test.1 -pass pass:123456 -md md5 
    #version=DEVEL
    # System authorization information
    auth --enableshadow --passalgo=sha512
    # Use CDROM installation media
    cdrom
    # Use graphical install
    graphical
    # Run the Setup Agent on first boot
    firstboot --enable
    ignoredisk --only-use=sda
    # Keyboard layouts
    keyboard --vckeymap=cn --xlayouts='cn'
    # System language
    lang zh_CN.UTF-8
    
    # Network information
    network  --bootproto=dhcp --device=ens33 --onboot=off --ipv6=auto --no-activate
    network  --hostname=localhost.localdomain
    
    # Root password
    rootpw --iscrypted $6$q56FOJKUUpSACRTf$/zzM8JLXd/xeJgJn27qfNU9a52qzPECWrz4/90IpdCZ3wHNDDknJCQqhLwv6YR7lUl2qWhypUw.XGcBzmdpZt1
    # System services
    services --enabled="chronyd"
    # System timezone
    timezone Asia/Shanghai --isUtc
    # System bootloader configuration
    bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda
    # Partition clearing information
    clearpart --none --initlabel
    # Disk partitioning information
    part /boot --fstype="xfs" --ondisk=sda --size=250
    part pv.253 --fstype="lvmpv" --ondisk=sda --size=20229
    volgroup centos --pesize=4096 pv.253
    logvol swap  --fstype="swap" --size=1000 --name=swap --vgname=centos
    logvol /  --fstype="xfs" --size=19225 --name=root --vgname=centos
    
    %packages
    @^minimal
    @core
    chrony
    kexec-tools
    
    %end
    
    %addon com_redhat_kdump --enable --reserve-mb='auto'
    
    %end
    
    %anaconda
    pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
    pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
    pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty
    %end
    [root@docker-01 ~]# openssl enc -a -des3 -d -S 'Fabcxdasd' -in test.1 -pass pass:123456 -md md5
    #version=DEVEL
    # System authorization information
    auth --enableshadow --passalgo=sha512
    # Use CDROM installation media
    cdrom
    # Use graphical install
    graphical
    # Run the Setup Agent on first boot
    firstboot --enable
    ignoredisk --only-use=sda
    # Keyboard layouts
    keyboard --vckeymap=cn --xlayouts='cn'
    # System language
    lang zh_CN.UTF-8
    
    # Network information
    network  --bootproto=dhcp --device=ens33 --onboot=off --ipv6=auto --no-activate
    network  --hostname=localhost.localdomain
    
    # Root password
    rootpw --iscrypted $6$q56FOJKUUpSACRTf$/zzM8JLXd/xeJgJn27qfNU9a52qzPECWrz4/90IpdCZ3wHNDDknJCQqhLwv6YR7lUl2qWhypUw.XGcBzmdpZt1
    # System services
    services --enabled="chronyd"
    # System timezone
    timezone Asia/Shanghai --isUtc
    # System bootloader configuration
    bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda
    # Partition clearing information
    clearpart --none --initlabel
    # Disk partitioning information
    part /boot --fstype="xfs" --ondisk=sda --size=250
    part pv.253 --fstype="lvmpv" --ondisk=sda --size=20229
    volgroup centos --pesize=4096 pv.253
    logvol swap  --fstype="swap" --size=1000 --name=swap --vgname=centos
    logvol /  --fstype="xfs" --size=19225 --name=root --vgname=centos
    
    %packages
    @^minimal
    @core
    chrony
    kexec-tools
    
    %end
    
    %addon com_redhat_kdump --enable --reserve-mb='auto'
    
    %end
    
    %anaconda
    pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
    pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
    pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty
    %end
    [root@docker-01 ~]# 

    (4).在测试下"-p"和"-P"选项的输出功能。小写字母p不仅输出密钥算法结果,还输出加解密的内容,而大写字母P则只输出密钥算法结果。

    加密时的情况

    [root@docker-01 ~]# openssl enc -a -des3 -S 'Fabc' -in anaconda-ks.cfg -out test.1 -pass pass:123456 -md md5 -p
    salt=FABC000000000000
    key=885FC58E6C822AEFC8032B4B98FA0355F8482BD654739F3D
    iv =5128FDED01EE1499

    其中key就是单向加密明文密码后得到的对称密钥,iv是密码运算时使用的向量值。

    再看解密时的情况,此处加上了salt。

    [root@docker-01 ~]# openssl enc -a -des3 -d -S 'Fabc' -in test.1 -pass pass:123456 -md md5 -P
    salt=FABC000000000000
    key=885FC58E6C822AEFC8032B4B98FA0355F8482BD654739F3D
    iv =5128FDED01EE1499

    若解密时不指定salt,或者随意指定salt,结果如下。

    [root@docker-01 ~]# openssl enc -a -des3 -d -in test.1 -pass pass:123456 -md md5 -P  
    salt=FABC000000000000
    key=885FC58E6C822AEFC8032B4B98FA0355F8482BD654739F3D
    iv =5128FDED01EE1499
    [root@docker-01 ~]# openssl enc -a -des3 -S 'FabM' -d -in test.1 -pass pass:123456 -md md5 -P
    salt=FABC000000000000
    key=885FC58E6C822AEFC8032B4B98FA0355F8482BD654739F3D
    iv =5128FDED01EE1499

    可见,解密时,只要指定和加密时相同编码格式和单向加密算法,密钥的结果就是一样的,且解密时明确指定salt是无意义的,因为它可以读取到加密时使用的salt。

    甚至,解密时指定不同的对称加密算法,密钥结果也是一样的。

    [root@docker-01 ~]# openssl enc -a -desx -d -in test.1 -pass pass:123456 -md md5 -p 
    salt=FABC000000000000
    key=885FC58E6C822AEFC8032B4B98FA0355F8482BD654739F3D
    iv =5128FDED01EE1499
    'Tj0;*lJ>vHnj2yJ`םn7(tWkjfj0r1U"ӊ
                                       2Vճ̓F|JxrD$JL:ה-dN^!O{ߵ;H3"7mUw3l;}]z2D7ͯ*hC"[()d~T?MZ$
    X ++2$;[A"EкAHC,e&W{$r;K/5
    YL-6tK94>K/[Vţuq=6QgAӔ,VZOj"                                  +)f++|C!g!B++VY++-,9A20W|CͳT-L]3J&](YE
    MCyj%ɭW])){]. 

    由此,能推理出对称加密时使用的对称密钥和对称算法是毫无关系的。

  • 相关阅读:
    p2394 精度题
    线性筛素数
    poj3468 线段树的懒惰标记
    逆元
    2018 Multi-University Training Contest 2
    2018 Multi-University Training Contest 1
    判断素数遇到的问题
    Mergeable Stack(链表实现栈)
    组合数
    poj2594 机器人寻找宝藏(最小路径覆盖)
  • 原文地址:https://www.cnblogs.com/liujunjun/p/12398772.html
Copyright © 2011-2022 走看看