原文 https://blog.csdn.net/zhymax/article/details/7683925

Openssl提供了强大证书功能,生成密钥对、证书,颁发证书、生成crl、验证证书、销毁证书等。本文将j介绍如何利用openssl的命令分析RSA私钥文件格式,同时也将简单介绍几种常见的私钥文件格式。

1 生成私钥文件

openssl有多种方法生成私钥:

  • genrsa生成RSA密钥。
  • req在生成req证书请求时同时产生密钥。
  • genpkey除了可以生成RSA密钥外,还可以生成DSA、DH密钥。

这里我使用genpkey命令生成RSA私钥文件,选择DES-EDE3-CBC算法进行加密,口令是1234:

 openssl genpkey -algorithm RSA -out privatekey.pem -pass pass:1234 -des-ede3-cbc

命令执行后输出私钥文件privatekey.pem,默认输出为PEM格式,密钥长度为1024,接下来使用文本工具直接打开该文件,可以看到如下内容:

  1.  
    -----BEGINENCRYPTED PRIVATE KEY-----
  2.  
    MIICxjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIhrQ3ApYYe1ACAggA
  3.  
    MBQGCCqGSIb3DQMHBAgyM5zYLuXOdQSCAoAFqnCRqkpoHJTY0BpLeekzjsuzdTOq
  4.  
    DkgxJMi4WRt1rZNyHqarbhHCZGC9Lug/xbLW5e2ZtjYVJ+ljmFb4lUaAch4nAgoz
  5.  
    m0J5YyrbFKppiqlk6vkS5hKfpKbWrx5hkQzMt6OsVEQFj2U+EvOI8SVgI6LkjNmh
  6.  
    7qokYxv9Inx9joM6agEUY9fXdAu53CyfjpneX95vxUHIn7hHmhxH7MYua619N7x+
  7.  
    JVA65b3Kj45aH3cnY/kMAQ78EN9aLpqYXzn6j9GRdUd2JMuP0IrYlREw3/z8Qn68
  8.  
    CwGXzGtkYnlt0xHdOG/tnmKWqBg1cY9uVx6g6JT1BUabqwxVODaMqaSsFr4o3xJo
  9.  
    3TTh8TswK0V/+3JLkXtasI7V8cRj2dksccGApujmB5eymU3XXTlX3iXs481I4kmz
  10.  
    JOZHbqfGOpyzW6WqhMO+LebIkyIGMlCGRiJ3PNSQI9w6bfZ9FoqC6OfFKY1OEmBN
  11.  
    6ALtPc+cYXeO5Msx9mbakIYRbcjlVmelPsLyvAceW/09OG909turflvYaGnM+SKd
  12.  
    KzWn2gFr3YwF57WZlX2jifYUUnjHVMZW7s/k6hgOxcEnvBOg4Ug/cKdNPUEB7tJx
  13.  
    nvsR+odHypyjgyphLEP8UmEiz3/hnPV8lhLDAPV7fKaK+zDglKqQYF3KBLh55q6h
  14.  
    PPe1HqahifK9EKqWOl7m1HhFPIZTex4clLy98rB3gyXnL0qx4+A7WD6uLJbU285j
  15.  
    IWMNq3f1c80ZPrpbhT6hd6Z9zUwfYT6gTO9gIIe4d5KVmfjNaFwSls5zaI6x7AJp
  16.  
    d/Xl/m1u469+J0rWyeY3D4wtahvZrKMXRrILtJ5OgkWPak2FTyMu/Hs/
  17.  
    -----ENDENCRYPTED PRIVATE KEY-----

私钥经过PEM编码后在文件头尾都添加了标签,用以说明当前的文件格式。从标签内容也可以看出私钥是加密的,因为有“ENCRYPTED”。中间的私钥内容是经过BASE64编码的,这样方便私钥的传递,例如在网络上传输,数据复制粘贴。

例子只是PEM文件格式的其中一种,以下是平时可能会碰到的PEM私钥格式:

PKCS#8 私钥加密格式

  1.  
    -----BEGIN ENCRYPTED PRIVATE KEY-----
  2.  
    BASE64私钥内容
  3.  
    -----ENDENCRYPTED PRIVATE KEY-----

PKCS#8 私钥非加密格式

  1.  
    -----BEGIN PRIVATE KEY-----
  2.  
    BASE64私钥内容
  3.  
    -----END PRIVATEKEY-----

Openssl ASN格式

  1.  
    -----BEGIN RSA PRIVATE KEY-----
  2.  
    Proc-Type: 4,ENCRYPTED
  3.  
    DEK-Info:DES-EDE3-CBC,4D5D1AF13367D726
  4.  
    BASE64私钥内容
  5.  
    -----END RSA PRIVATE KEY-----

除了以上几种,还有微软的PVK格式;以及DER编码格式,就是在使用PEM编码前的数据,由于没有密码保护,平时很少直接使用。

Openssl ASN格式在加密私钥数据时只能用MD5算法生成key,而且只迭代计算了1次。

所以从1.0.0开始Openssl把PKCS#8格式作为默认格式,可以为私钥文件提供更好的安全性和扩展性。

我们这里就针对PKCS#8格式的私钥进行讨论。 如果大家想要研究其他格式,可以使用以下命令:

genrsa 生成ASN格式

rsa 生成或转换为PVK格式

openssl rsa -in privatekey.pem -out privatekey.pvk -outform PVK

2 分析私钥文件

使用asn1parse命令读取私钥ASN.1结构,其中–i表示输出使用缩进格式。

openssl asn1parse -i -in privatekey.pem

  1.  
    0:d=0 hl=4 l= 710 cons: SEQUENCE
  2.  
    4:d=1 hl=2 l= 64 cons: SEQUENCE
  3.  
    6:d=2 hl=2 l= 9 prim: OBJECT :PBES2
  4.  
    17:d=2 hl=2 l= 51 cons: SEQUENCE
  5.  
    19:d=3 hl=2 l= 27 cons: SEQUENCE
  6.  
    21:d=4 hl=2 l= 9 prim: OBJECT :PBKDF2
  7.  
    32:d=4 hl=2 l= 14 cons: SEQUENCE
  8.  
    34:d=5 hl=2 l= 8 prim: OCTET STRING [HEX DUMP]:7A61B055165A89CA
  9.  
    44:d=5 hl=2 l= 2 prim: INTEGER :0800
  10.  
    48:d=3 hl=2 l= 20 cons: SEQUENCE
  11.  
    50:d=4 hl=2 l= 8 prim: OBJECT :des-ede3-cbc
  12.  
    60:d=4 hl=2 l= 8 prim: OCTET STRING [HEX DUMP]:110E8A184EFEAB9C
  13.  
    70:d=1 hl=4 l= 640 prim: OCTET STRING [HEX DUMP]:
  14.  
    C94F34F0CFF56B3E92D437C49559B1BD632BA2D8B22AF290B0E8EBB7F71C555115CED4DE87E3922A41436A20DA1DB01F1BD88EA3002E8AD4691C0B25F16AF4D196C2A96B99A1D49F704A21D3B81F8CC81C3F09412317B67F453151490D2573E1FD96D13BB55E7FCD4085ED0C4DD75EB1EFFC4ACE5431AFD708E6ECE5077BAB2B03965C6F2873C1DB5F475F861E9C04D61465C72A8A99DCF093190F746DD8959C0B0942E38A013B0FEC2D4A66F600EF75CE0326F3B4904C3128CB389204A1CC4F93EED7C8F2450603A42C6C16FB143FF4C9C01E714A43CC07B1F1B580A6C9DE4DC9B78CA0D5B874C75A0F56F6A55CFE4620F1AC639DCE4A8AF2BCBB69691DAF983BB26F6A6C859C371D1EBA7DA5C27FBDAC86C6529C48B32E3B89317FC7EBF03F9C105EAA1892437E9E789F0E2340979812A53CD1668EC07A45BBEAE088E7E27BB20B16C2D14280970BBF715D57005F194B97A1784E7BC563A0B84909A7EAB6C7E0BC6E2B467AA4009420D190617F93CD32FAEEE50003462DC8B26816040E891523E1375F339A3F05C43C9E90A4533BD4D3F75A2A33E60D91563542355D5ED1F46CF62594460694F459F0EC428BECE015F075895CFEB502EA22ECD9B53BF050B795074BE9A51194789F0B2970C21CCFE16284FB564F720C7899D5840362C48D248A50BAFA2720B0C1F7B417AD6EA183459BBB80679A85D96421C5AE3FA53A2135217F886759187123766914BB0169F6F9C3A36F1C46B6EB9300009A799D0F96C3E1FBE805F17A01FF2F5A9C941399E6130DBEE9825F4EB8937F2B8F0B3DE5F08644F3DC65028F2DE150D03D454AECFF9CAF26A00BB1B6D6D2C5255216E0A6769F14937618E31573811AAA464C3C42246A17DD70B1F77A87948FD5C7526D569BB8

ASN.1结构输出格式说明:

0:d=0  hl=4 l= 710 cons: SEQUENCE

0 表示节点在整个文件中的偏移长度

d=0 表示节点深度

hl=4 表示节点头字节长度

l=710 表示节点数据字节长度

cons 表示该节点为结构节点,表示包含子节点或者子结构数据

prim 表示该节点为原始节点,包含数据

SEQUENCE、OCTETSTRING等都是ASN.1中定义的数据类型,具体可以参考ASN.1格式说明。

最后一个节点OCTET STRING      [HEX DUMP],就是加密后的私钥数据。

为了方便理解,下面给出相关的PKCS定义。

PCKS#8文件格式定义:

  1.  
    PrivateKeyInfo ::= SEQUENCE {
  2.  
    version Version,
  3.  
    privateKeyAlgorithm PrivateKeyAlgorithmIdentifier,
  4.  
    privateKey PrivateKey,
  5.  
    attributes [0] IMPLICIT Attributes OPTIONAL }

privateKey,加密后私钥数据,最后一个OCTET STRING数据块。

privateKeyAlgorithm,使用的私钥算法,详细格式在PKCS#5 2.0中的定义:

  1.  
    PBES2-params ::= SEQUENCE {
  2.  
    keyDerivationFunc AlgorithmIdentifier {{PBES2-KDFs}},
  3.  
    encryptionScheme AlgorithmIdentifier {{PBES2-Encs}}
  4.  
    }

keyDerivationFunc

加密密钥生成函数,现在默认使用的是sha1,还包含了salt,迭代次数iterationCount:

  1.  
    PBKDF2-params ::= SEQUENCE {
  2.  
    salt CHOICE {
  3.  
    specified OCTET STRING,
  4.  
    otherSource AlgorithmIdentifier {{PBKDF2-SaltSources}}
  5.  
    },
  6.  
    iterationCount INTEGER (1..MAX),
  7.  
    keyLength INTEGER (1..MAX) OPTIONAL,
  8.  
    prf AlgorithmIdentifier {{PBKDF2-PRFs}} DEFAULT
  9.  
    algid-hmacWithSHA1
  10.  
    }
  1.  
    对应数据:
  2.  
    19:d=3 hl=2 l= 27 cons: SEQUENCE
  3.  
    21:d=4 hl=2 l= 9 prim: OBJECT :PBKDF2
  4.  
    32:d=4 hl=2 l= 14 cons: SEQUENCE
  5.  
    34:d=5 hl=2 l= 8 prim: OCTET STRING [HEX DUMP]:7A61B055165A89CA
  6.  
    44:d=5 hl=2 l= 2 prim: INTEGER :0800

encryptionScheme

加密算法,例子中使用的是des-ede3-cbc,该结构中还包含初始化向量iv。

  1.  
    对应数据:
  2.  
    48:d=3 hl=2 l= 20 cons: SEQUENCE
  3.  
    50:d=4 hl=2 l= 8 prim: OBJECT :des-ede3-cbc
  4.  
    60:d=4 hl=2 l= 8 prim: OCTET STRING [HEX DUMP]:110E8A184EFEAB9C

解密流程:

1 按PKCS#8和PCKS#5定义从文件中解析出相关参数:

加密密钥生成函数(KDF)PBKDF2;

加密时使用的salt:7A61B055165A89CA,以及迭代次数iter:0x0800(2048次);

加密算法des-ede3-cbc,以及加密初始向量iv:110E8A184EFEAB9C

2 解析出加密的私钥数据data,也就是最后一个OCTET STRING;

3 生成加密密钥:key = KDF(pass(1234),salt,iter)

4 解密 des-ede3-cbc(key, iv, data)

这一解密过程可以使用openssl的pkey命令完成,执行完成后得到privatekey.der文件,这个是没有加密的私钥文件,数据是ASN.1格式,并使用DER编码。

Openssl pkey -in privatekey.pem -out privatekey.der-passin pass:1234

然后再次分析密钥数据,由于输入是der格式,需要使用inform参数说明:

openssl asn1parse -in privatekey.der -inform DER

  1.  
    0:d=0 hl=4 l= 604 cons: SEQUENCE
  2.  
    4:d=1 hl=2 l= 1 prim: INTEGER :00
  3.  
    7:d=1 hl=3 l= 129 prim:INTEGER :
  4.  
    A11E66B0F965215AB4AD771581700477F62D9EDF2CFEBDF2E20C02DE4E95881F58CA898B6FC389CC83AE39DE95C0252BCF9FB98A6A21A20B751222DF2A4CBE1E08F8BDC8D443A59D4944723C33CED5601E1CF4A324E88B951626326783014CFF3BB7CF7278BF443AB003D1E1608B97CFC7783C6FD42B9A7C8F84C5633FB72DFB
  5.  
    139:d=1 hl=2 l= 3 prim: INTEGER :010001
  6.  
    144:d=1 hl=3 l= 129 prim:INTEGER :
  7.  
    9B2C9B7CD105AC851EC47E8FB0D541088489D59C5E4A8E88F15ADE1C5B953ABFEE154B39870FCD94B23247BBEF805A8C826FF413B239E8469E9F3404B949A643E1E2CCF9753822FD28345B7898148164DA2D858F672B52C7B3041F0A9F6FFFB97759D3C04AE3ED2E372E4ADD3A44202CE004D189566A81F19239649779F30DE9
  8.  
    276:d=1 hl=2 l= 65 prim: INTEGER :
  9.  
    CE25257FDE50AFDAF926BDBEFE5A236C130F2714C5FC0C36A07B5AA5618E8F5039E313387C933A86EBDC2DEF8640069CB98B1D04C3E74B46C75F292A768083D5
  10.  
    343:d=1 hl=2 l= 65 prim: INTEGER :
  11.  
    C8159573F6C413EAC0BB721B859A4B7920FF9DE151546CA28FDA3F43A0999C835DB9078AF5054CE503C4BC174ECB1F0C4DE033E116A296FD67B4158F869E628F
  12.  
    410:d=1 hl=2 l= 64 prim: INTEGER :
  13.  
    7329855D7DD10DAD02EB85AD216331CEBA87088A2E60B462001D697262A1C5A647F07758631FCCDE7AFD321C519F8B121B05805C9D24A58510F4348728547B51
  14.  
    476:d=1 hl=2 l= 64 prim: INTEGER :
  15.  
    53735D203EBDCD28CE35E003C69771FF155A47B92038BC0E993D07C1E70BEA9187D79263CC89E7666549FAC125E5E60F35B3DB2F78475BFE58F06D45AD7A05D5
  16.  
    542:d=1 hl=2 l= 64 prim: INTEGER :
  17.  
    4F454C491EAE6CD85ED812D8A26AFD5FD0F6D7DD12AD6D20EDA8C2D257943928B2AE66FDE336F40370D9CC30B85EB2F20D3B4FDAB61D168FE7936CB6AB5E8FE2

得到的数据与上次导出的格式是相同的,虽然看起来数据多,但是层次结构起始要简单,数据就是一个结构体(cons)SEQUENCE,包含9个整型的原始数据(prim)INTERGER,这个就是私钥结构,该 ASN.1结构在PKCS#1中定义如下:

  1.  
    RSAPrivateKey ::= SEQUENCE {
  2.  
    versionVersion,
  3.  
    modulusINTEGER, -- n
  4.  
    publicExponentINTEGER, -- e
  5.  
    privateExponentINTEGER, -- d
  6.  
    prime1INTEGER, -- p
  7.  
    prime2INTEGER, -- q
  8.  
    exponent1INTEGER, -- d mod (p-1)
  9.  
    exponent2INTEGER, -- d mod (q-1)
  10.  
    coefficientINTEGER, -- (inverse of q) mod p
  11.  
    otherPrimeInfosOtherPrimeInfos OPTIONAL
  12.  
    }

最后一个otherPrimeInfos是可选项,例子中没有该数据。

结构中包含了RSA密钥算法中用到的所有信息,每一项的具体定义可以参考PKCS#1。

3 分析公钥

为了方便获取公钥,在私钥文件数据中起始包含了公钥信息:

  1.  
    modulus INTEGER, -- n
  2.  
    publicExponent INTEGER, -- e

公钥的ASN.1结构也在PKCS#1中定义:

  1.  
    RSAPublicKey ::= SEQUENCE {
  2.  
    modulus INTEGER, -- n
  3.  
    publicExponentINTEGER -- e
  4.  
    }

可以使用openssl命令导出公钥文件pubkey.pem,使用文本工具打开公钥文件,pem头尾格式和私钥类似的标签:

openssl pkey -in privatekey.der -inform DER -out pubkey.pem-pubout

  1.  
    -----BEGIN PUBLIC KEY-----
  2.  
    MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQChHmaw+WUhWrStdxWBcAR39i2e
  3.  
    3yz+vfLiDALeTpWIH1jKiYtvw4nMg6453pXAJSvPn7mKaiGiC3USIt8qTL4eCPi9
  4.  
    yNRDpZ1JRHI8M87VYB4c9KMk6IuVFiYyZ4MBTP87t89yeL9EOrAD0eFgi5fPx3g8
  5.  
    b9QrmnyPhMVjP7ct+wIDAQAB
  6.  
    -----END PUBLIC KEY-----

继续分析公钥文件的ASN.1格式:

openssl asn1parse -in pubkey.pem -i

  1.  
    0:d=0 hl=3 l= 159 cons: SEQUENCE
  2.  
    3:d=1 hl=2 l= 13 cons: SEQUENCE
  3.  
    5:d=2 hl=2 l= 9 prim: OBJECT :rsaEncryption
  4.  
    16:d=2 hl=2 l= 0 prim: NULL
  5.  
    18:d=1 hl=3 l= 141 prim: BIT STRING

但是这里显示格式和上边给出的PKCS#1格式不一致,其实这是x.509中的定义的格式,在X.509证书文件中就是使用这个格式封装公钥数据,其中BIT STRING的内容就是PKCS#1格式的公钥数据,并说明了使用的公钥算法rsaEncryption。

  1.  
    SubjectPublicKeyInfo ::=SEQUENCE {
  2.  
    algorithmAlgorithmIdentifier{{SupportedAlgorithms}},
  3.  
    subjectPublicKeyBIT STRING
  4.  
    }

我们可以进一步使用asn1parse工具解析出BIT STRING内容,首先确定该数据块偏移是18,然后使用参数-strparse指定位置,可以看到输出的数据和私钥文件中的是一样的。

asn1parse -in pubkey.pem -strparse 18

输出公钥ASN.1格式:

  1.  
    0:d=0 hl=3 l= 137 cons: SEQUENCE
  2.  
    3:d=1 hl=3 l= 129 prim: INTEGER :
  3.  
    A11E66B0F965215AB4AD771581700477F62D9EDF2CFEBDF2E20C02DE4E95881F58CA898B6FC389CC83AE39DE95C0252BCF9FB98A6A21A20B751222DF2A4CBE1E08F8BDC8D443A59D4944723C33CED5601E1CF4A324E88B951626326783014CFF3BB7CF7278BF443AB003D1E1608B97CFC7783C6FD42B9A7C8F84C5633FB72DFB
  4.  
    135:d=1 hl=2 l=3 prim: INTEGER :010001

4 公私钥操作

分析完私钥和公钥格式,以及之间的关系。接下来我们将继续使用openssl的rsautl测试它们之间的加解密、签名、验证等操作。

测试文件test,内容“1234567890”。

4.1加解密

1)公钥加密

openssl rsautl -encrypt -in test -out test.enc -inkey asn1pub.pem -pubin

2)私钥解密

openssl rsautl -decrypt -in test.enc -out test.dec -inkey asn1enc.pem

比较test和test.dec两个文件结果相同。

4.2签名验证

1)私钥签名

openssl rsautl -sign -in test -out test.sig-inkey asn1enc.pem

2)公钥验证

openssl rsautl -verify -in test.sig -out test.vfy -inkey asn1pub.pem -pubin

比较test和test.vfy连个文件应该相同。

使用openssl命令剖析RSA私钥文件格式的更多相关文章

  1. (3) openssl genrsa(生成rsa私钥)

    genrsa用于生成RSA私钥,不会生成公钥,因为公钥提取自私钥,如果需要查看公钥或生成公钥,可以使用openssl  rsa命令. 使用man genrsa查询其用法. openssl genrsa ...

  2. openssl mac中使用终端生成RSA私钥和公钥文件

    RSA密钥生成命令生成RSA私钥openssl>genrsa -out rsa_private_key.pem 1024生成RSA公钥openssl>rsa -in rsa_private ...

  3. OPENSSL中RSA私钥文件(PEM格式)解析【一】

    http://blog.sina.com.cn/s/blog_4fcd1ea30100yh4s.html 在PKCS#1 RSA算法标准中定义RSA私钥语法为: RSAPrivateKey ::= S ...

  4. MAC下用OPENSSL生成公钥和私钥

    MAC OS自带了OpenSSL,所以不用去编译那一坨跟SHIT一样的源码.直接在命令行里使用OPENSSL就可以. 打开命令行工具,然后输入 openssl打开openssl,接着只要三句命令就可以 ...

  5. 使用OpenSSL为支付宝生成RSA私钥

    通过openssl工具生成RSA的公钥和私钥(opnssl工具可在互联网中下载到,也可以点此下载无线接口包,里面包含此工具)打开openssl文件夹下的bin文件夹,执行openssl.exe文件: ...

  6. openssl 非对称加密算法RSA命令详解

    1.非对称加密算法概述 非对称加密算法也称公开密钥算法,其解决了对称加密算法密钥分配的问题,非对称加密算法基本特点如下: 1.加密密钥和解密密钥不同 2.密钥对中的一个密钥可以公开 3.根据公开密钥很 ...

  7. windows 下 openssl 生成RSA私钥公钥以及PKCS8

    生成RSA私钥 打开bin文件夹下面的openssl.exe,输入genrsa -out rsa_private_key.pem 1024 把RSA私钥转换成PKCS8格式 输入命令pkcs8 -to ...

  8. RSA私钥和公钥文件格式 (pkcs#1, pkcs#8, pkcs#12, pem)

    RSA私钥和公钥文件格式 (pkcs#1, pkcs#8, pkcs#12, pem) 2018年03月07日 11:57:22 阅读数:674 Format Name Description PKC ...

  9. OpenSSL命令---pkcs8

    用途: pkcs8格式的私钥转换工具.它处理在PKCS#8格式中的私钥文件.它可以用多样的PKCS#5 (v1.5 and v2.0)和 PKCS#12算法来处理没有解密的PKCS#8 Private ...

随机推荐

  1. IE9中input事件与异步事件连用会发生跨域问题

    IE版本中IE8以及IE9以上版本不会存在这个问题唯独IE9 发生跨域问题代码 $("#stock_code").bind("input",function(e ...

  2. HDU 2013(递归)

    Problem Description 喜欢西游记的同学肯定都知道悟空偷吃蟠桃的故事,你们一定都觉得这猴子太闹腾了,其实你们是有所不知:悟空是在研究一个数学问题!什么问题?他研究的问题是蟠桃一共有多少 ...

  3. Python基础2 字符编码和逻辑运算符

    编码 AscII码 :标准ASCII码是采用7位二进制码来编码的,最高为0,没有0000 0000,所以就是2**7-1=127个字符 , 当用1个字节(8位二进制码)来表示ASCII码时,就在最高位 ...

  4. Python学习笔记第四周

    目录 一.基础概念 1.装饰器 1.装饰器本质就是函数 2.实现装饰器知识储备 1.函数即变量 2.高阶函数 3.嵌套函数 例子 1.将一个函数名作为实参传递给另外一个函数 2.返回值为函数名 3.函 ...

  5. 【leetcode】283. Move Zeroes

    problem 283. Move Zeroes solution 先把非零元素移到数组前面,其余补零即可. class Solution { public: void moveZeroes(vect ...

  6. CodeForces - 1101D:GCD Counting (树分治)

    You are given a tree consisting of n vertices. A number is written on each vertex; the number on ver ...

  7. window cmd-常用命令

    1.常用命令 dir 文件列表 cd 改变目录md 创建目录 rd 删除目录 type 显示文件内容 fc 比较目录 attrib 修改文件属性 copy 复制文件 del 删除文件 ren 文件改名 ...

  8. Blender模拟全局照明的简单方法

    https://en.wikibooks.org/wiki/Blender_3D:_Noob_to_Pro/Faked_Gi_with_Blender_internal模拟全局照明最简单的方法是在我们 ...

  9. php基础-5

     php的面相对象 <?php class Hello { public function say_hello() { echo "hello"; } } $say = ne ...

  10. 【HDOJ1069】【动态规划】

    http://acm.hdu.edu.cn/showproblem.php?pid=1069 Monkey and Banana Time Limit: 2000/1000 MS (Java/Othe ...