原文 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. centos安装python3虚拟环境和python3安装

    1.本文的系统命令一般会在语句前加上#号,以区分系统命令及其他内容.输入命令时,无需输入#号. # yum install vim 2.本文系统输出的信息,会在前面加上>>号. # whi ...

  2. HDU 1796 How many integers can you find(容斥原理)

    题目传送:http://acm.hdu.edu.cn/diy/contest_showproblem.php?cid=20918&pid=1002 Problem Description    ...

  3. ORA-00600: internal error code, arguments: [kole_t2u], [34]

    数据库版本10.2.0.5,Alert 日志存在ORA-600报错 ORA-00600: internal error code, arguments: [kole_t2u], [34], [] -- ...

  4. WCF 添加服务引用 HTTP 请求已超过为 00:00:00 分配的超时。为此操作分配的时间可能是较长超时

    今天在用公司的笔记本引用WCF的时候,处于一直等待的过程,一直在下载信息,一直等了很长时间,弹出了一个消息 下载“http://ip:8085/xxxxx/xxxxx/mex/$metadata”时出 ...

  5. SSH升级到7.7

    #!/bin/bash#删除旧版ssh包 危险操作,不删除也可以安装,建议跳过此操作.#rpm -e `rpm -qa | grep openssh` #安装zlib依赖包wget -c http:/ ...

  6. [LeetCode&Python] Problem 21. Merge Two Sorted Lists

    Merge two sorted linked lists and return it as a new list. The new list should be made by splicing t ...

  7. ZOJ - 4082:Little Sub and his Geometry Problem (双指针)

    Little Sub loves math very much, and has just come up with an interesting problem when he is working ...

  8. PowerDesigner15 增加Domain域

    第一步: 第二步: 点击此按钮,在弹出框中对Domain域打钩即可

  9. HDU 1425 C++使用sort函数

    sort Time Limit: 6000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submissi ...

  10. 基于PaaS和SaaS研发平台体系

    基于PaaS和SaaS研发的商业云平台实战 背景介绍 SaaS.PaaS.IaaS等云服务模式已经被大家普遍认可,在研发过程中借力一些PaaS和SaaS平台,能够提升产品的研发速度和功能稳定程度.本文 ...