openssl 生成的私钥不满足 n = p * q [英] Private key generated by openssl does not satisfy n = p * q

查看:24
本文介绍了openssl 生成的私钥不满足 n = p * q的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用以下命令使用 openssl 生成了一个密钥

openssl genrsa 1024

我得到了以下结果

-----开始RSA私钥--MIICXAIBAAKBgQC2Lh4HLcCR76Wv3oXl6sZ7pv8l9b/66H+I6Bb86tz8RhWCmTCGxPVgtZ+w9WutU/rqBHHZOpotX4QDksRD8dRFh6a3HwkIFQdTcDoiD39yNP8F02GddAl8p/URC5jNCLMSfUK38wMocmoI1I5vqdMNrzUnOup18rl4089Z+faMKQIDAQABAoGBAJrL4z5iWiengxqV8yETBeU8WcJft+n0dapXzHDNAUo8Izr+AIYEBp1Ot4sef4igu6zuae80JJ45c2u14p/5dWzN9/URmhTP8xLGjGCjltOJLLyhBPP+ZsLjqu6l57MNV6jDqDLdRC66w4NMRCN3FACxcldIC5L6B9OA7UvO1ugBAkEA8s1o6BvufTeDktyOMfW0ZeLGk/6EXp8nf7BizYhAAPtSt8DegnfYFx2XDgKnYSB15dTDIDMe/KaAGcuUb/ZjiQJBAMATb1fFdl7PGccVPgeTaupJayHPySc9PSsACV6VIAnpcU/3NZzdMkdIL/JsOsD+1M9uQJqvRZO4qQdjcR5Om6ECQEJGgYlB/pJdcePHomTOvcRF55CEG9u8M8rt8qFvvJDICWcxFUulrO16XT4syUWA1825it2iNqYeSL9By63YIokCQBnmRPw71xM/r8UleyDAYwlGbxi3EPOmkUnsDldfmltby/ixZ9xIA1CTTkvNBjsh4YY64qE5AxPBMaGaahVhGiECQHyQvXUNE2IUco+ZwmmLnb2ey1s5tBg7i0lEZG47G7GVo+yKdJHpToJD8eRJA/2D+pMhQIZm8X/XDIoi1AQ/TRY=-----结束RSA私钥-----

通过使用 http://lapo.it/asn1js/我反编译上述<代码> PEM 并且发现了

<预> <代码> P = 12716592588957205057720227362856602359162165918588008158928004904780617816265357754968000322907349867949577092305558696339499022301055839537975977118688137Q = 10059832080410675679274931119486090017360564066559599189867309386706046720813347145402059918876964980032136051476889631968099168811652389989474036177869729

但同时模数

 <代码> N = 127931248913253271289716500205639992466284651287857358177145251825312810367993147780821624164062592337708505486275588028025122128928225266601591073331803580493341719724935049328478344297205955905466581637169109448199715137939448946445804542355907923908845024638480376219852266194827768486624319018352514599977

何时应该等于:

 <代码> N = 127926786079904340486324750015310657558743663036816604629670248604945247855865212421871439992814824964459404054462886419168595224468110358113599485755243718536935880977456835036272916419632947427885989469252242704342884476060911074859116149906854382812141105735147419775039435625802885168567201322191763704873

为什么N 不等于p * q ?


这是我的 openssl 生成的一堆密钥,我使用的是 Mac OS X Mavericks,第一个密钥的 N 正确,第二个不正确,我没有检查其他的,但无论如何这个问题似乎正在重现,我正在使用以下 openssl 版本OpenSSL 0.9.8y 2013 年 2 月 5 日":

-----开始RSA私钥--MIICXQIBAAKBgQDb4ZTDCASpFV+89RzD8MYR/xASV/piyXB3+qVq+PueDqq+45ELXt5UE2jXanfOh3uE3G3Fi76rm08XUC0CvFB7DxFJAMvchr5LbE9x2EMDmfpuZPOIbDI+r+XZ+KJF++h296TOnncgnXILoD1gihkld7MS9g49TwsBPOtsMJzDRQIDAQABAoGBAMpGFfTormjhacZJcqHqIDwz+RP27TbtetJUuNHUpJw9f+PFMwxTxJFxnZP1tKtAxWdu5GjDaq8xW6vlrNKEbD9jg2WU/myYffNeHxNVjivzypeQzBSmcE5LKFpMobjHkvXbBkkyX8Oh6ZF/3+NOhxOVZMH7CaZ90a+xPf7ENXJBAkEA+Zx/rwrx81+Ds79thCAUU4EnMVROGFPr/V7mt9AFXjAXHRuvg49Aon23bt48jdroakV5vk0ltKO8Z5xnRWlGNQJBAOGCSOL+zFJd6zTM+CkbgGtml+DIunr7Avfu2mZyaMv4mLo+GTRNctZEKhknYfydewhORLKg51WdLThoe9VG6tECQCUyIvzMnr1rkE6qygEUXrMK3fJF49VQPCxnhe4CO6qLdAZMZ90s7a7JGRqWV2O0KUoczEWFbYb7l0nBTspTI7kCQGmTL0BmfY3KPoWXuE62e2bMvyoTj4pn3bnpbwIrafikSAxZaj9cSvkZLIReNbeomqMG0Y63WdZxIWyZLfBppSECQQCEIkbINrQPJHoLtD57AbptUeyaE5lQBurzXMVf84FAOJjd5OKmEX+LYbLguzOjvkcysNEZBRphz4L07shvscBC-----结束RSA私钥----------开始RSA私钥-----MIICXgIBAAKBgQDTzIPHUoq9I+Fmdc8kdpuu6BSzLAmLsXv1FKXdHSYSmqI3HRTsZcYDSM1Vp/Svf6jdt2uNuNt0UaXzFowT9fi+sIFE2Zlpl8nEM66YZYHJfHQXy6GRh2ybiNcDEigasc1wBvbkdSR9RNLunLzX6YNY+197CY6vgW0R0pzuRRR/JQIDAQABAoGBAKAeu3mTM4QufhdB9WoxqR0gI5YZMtZDRd1Q0NxLTx89fGmCOPFHN93/ygx5v4h2UKneIxevq2lS2MzgPOJSUMwn14/19iujT2+jC6vHKpwcjkGrnLXdsdjowrHJX3tnbZC4pS/2UU8r/QKzwX957+Idn4Mt2v2sDzQj5ZoPRtfBAkEA/GLl6BXQQp/4ymsytyM6gleLdaIklCESUC6yZpY48HJqqg3lJwy/3bgb9fYlok/DPbyiEK/p+cXLlXycbdA6HQJBANbU2MAwpBprkyliEvb+WAvyIGuf3xCVJq3CicuWfJphtMdUEsQmcpGbQp/0bXUuFkks/xOFMKfBkAbn7Z5tCqkCQQCffcP56ScFo2AuUpXnA50q1zXrLX7eGRQhnHRCvfXXhQaA1m0UQ0tQStNomJdpvewMrJLh5rj+PY+MtQWJo8fFAkBmH5RR+E1qSc0RFRAS3eGY/CaxQrRVO7HBVAMRBp6A/QVk4/Bv0h8QXJAVXapS0+/AJWW0L9JrTLZcsg/hCdDRAKEAmHZNomd/wptVccGwXtgXIL5ElQWLL/3WEggCqOIpc+v9IRpKND9qn1zwu3tnBrrUbmC2M8CEOnuHP+lnumc2YQ==-----结束RSA私钥----------开始RSA私钥-----MIICXAIBAAKBgQCWVkOkNXkWd2QoWudAD8rrzioby2g8k1pruaclCMo2mSns++TGS3lWgLqS2mPynNONVbqoedLKKnGY9HYzLCCOoq5loOYCtIcVyBVGhx4eQrZgmUAwRqQChztrj09+omveQQF2+QW9DJZrYSsKB836iTt5oAEA3ER6fwcV3fLQIDAQABAoGAQKNife4H3CMFS1yaZS7lHrIL5Nt2O+VXUU4HkaLP3t3H6v77BE9bIlhC3/VKV/wZ8YDUupP64JPhO02b4k1P83oG5SAFTb0zZwmHI1+wVnNomq0DoRPw2710a2P4Ya09nLbuRlm6SzsAkuwmyv+fPDAs8b/m15kWSP/HTKMbAPkCQQDEUaTQUg/8sPH+jDraHpjGtVRqjkysAZhNgMH+NGWLbk3nujZj4oMfid+4Xg4/Sr5EADqr0HrSlMnVhhlwBCxjAkEAxAodCSmu9khiuRzMzXAc/gvqdtq+fF6Zx+rTUF5HYeD7l1u3SXeswhDku23Pp41+A4axWHXHTsDlKv49m9YzLwJBAJWIEl9SgjbYmBpouVL2RyvjZf8bkC7bsCQoVJrJUicXx2MfpNoD6BgXrj4B9hwjVDT7b7T6wPKwveNTlwCJTT0CQGNJW/tQCTTi5F0soO1LYuOn1U/s6ZzDrM77t5p0pWKFN+copGOpIO4I8E+dBhauKqxOg3Nx80eHmolzynAqxDECQEmyZq1mFEpB6buwNhRmj/kyOGmA88IbovZhBT+Un/6oheaaMVl7Hst7nhihxQ081c3mFuwnH/mjixKKkpVens8=-----结束RSA私钥----------开始RSA私钥-----MIICXQIBAAKBgQCm7mMUqExF5Nq2qzQ8gLVfq5AqKQlKm47Df4H/XqH9msGNCoIxtnH4Tbe38tzA9TDRxxYQ6oCmTRUlKqstxb0j8NK7KV63vrxhLUlCIinMk9qcTL/TtLm7/rBSZ7M6OjupzjjQ8Idu7Jd7HVITvFDYbDtd0uDh7Hd1GCrqrHnAoQIDAQABAoGABjMgVuoROx9OyC3/mKenFNCIYCh6Ad1ZJgWcTGG1Xnfa7GQRhcsi3Hf2dMx+SmRQ1dmxBhvPf12phWHaTa7kyVvyXWVbp4OYPsU24/WuVfXysmA1FhO4OJMoTEqQFtNGmC05vhwNge+zuyiyj+4Rvhe4CRWeAlWQT9ucOZStoAECQQDdM7qny+KGMysisUttOal551Ow1GsM6vo990tZP5jKD/lYkLhi4GBtib66pdqyizUhQoS5stFgvUk9ztc8cUKBAkEAwTEOaypn6oUtDZMAiIW8a0m0bNtkXRnSb6UaG6n3VEEz8wkjg2KxZJWIl+vk1JZKlJUOWrH2FhJexEOMt20uIQJBAJWVS5341ABoTb0yI42DNsYG1qN3ocSkigCpYDzEMvBBiR6JDwdeMBci1OWnDpM6a/1H3DUvZUOD/Slc3FQ1SwECQHfO93UoWEeNjbIkXylLXt1eWSFFMcm3ENUiG73aO0MqKJBpM3fwhbiuL4afyUq5ZckdY0iFoupvPAwVJDhA4mECQQCG/UmJG+N0Stt3nn16QzJwwGu7djFXFgSYn8LGIrRME3pfC6OMcJ3exAR5t78Bth1VLbST2S2AWNaT0d0fsSA/-----结束RSA私钥----------开始RSA私钥-----MIICXQIBAAKBgQC0n8+Te4265j0QqqTyV0QnGbU/v9YWqTWAbfvNwXE5nZuJoLuPyzL4wjcZknBjQCBLsO64a9rxZx5fmL3R+kHjcF6S8OBB9NEXRk70D+vFgHjexGR9mOk/SXRjffaC/pMiSmbuJMFvGCEcii/9tpm03xYWMvpkjn1UEX69BE+TwIDAQABAoGADkEebJEvmjRZVVtiMQ3Z/wv0VdeZ2af45O3JFW/Ss61QfQgGRU7P8vnAx2/b从 0mRgMoWwfaSZrQms0UlisaI5lEQu7LbhQZqwV+Bz9h784RAHyHLoTTcHRJ/+TvRT/naCcwzXzHoSQrXmruIbMh6w0KeqVveA9ZI7RMaAZkECQQDpv0ZWZln4ZXD0nK96Pv78b7GwRxsBrT3qHFEMEK60B6lMK61shJxFMehb6Nh4UXVth6J295WmphsKme53CPf5AkEAxdHcdE3ofZwiEKjV3or9aSinZA+AjUw8AqlDxkIS3EGx9qkdQWv+2tVHJDzlRv68PmkpFotWZyBfKbbKEwzKhwJBALt5ON3FG3X5Tl4yaR9f9TzcDKS4cvWmUBk7etl1a9lip6s7AM4fkgKBY76Lg0sE8mzVsz09l95gLSIUkckQ/WkCQQC7BpvAFfxt7ZTDXWy+d3f42SfRUVq/vEisV22tXsDIHxBrXR48wSb1rFkTaMN4aNR+yRvApcHtxExUeu34Lsq3AkB3HOVsRBj1UlZluiScIEfk1PX2gd84/NBbxT/mhrqi/wb8sw7ltPobNN7vxlSu5bZG3EfjgEyCCv4EcLNB/uY6-----结束RSA私钥----------开始RSA私钥-----MIICXgIBAAKBgQDqvM6BgcFGPrwR2A8tnphtH30ruwvE3RBPZk0CUzuqh7BQrPsroGNxP0D6ulWg/yWn25ovWjm3ksZ2TaD1PA7PVb3FbzYI3kIQIPFDX6przLwC+faHJ9tqFL1tiMUhjV7Mu8HXx44hTCA8vVbe/GwHn8y1sIZ3FIZnqAlpaFE75QIDAQABAoGBAJCHBWKpoHV+pM8bx2SgNFtjuu7U8I8aSTOJ2jpnQuJhPwa9KryWuQN+HaUCWzyQPAAY7tre45CKd1VZwJOdkcOam4gdRUqrLVSXfYojDCOwn7O7Fwql26v2z42GYNu/6umdQhsnVCpfked43d/sLuZH4keO2BQVZIS7wxUMMlm1AkEA/CEZ2RuL3Sc570+cGyDZ3OOfD3k/Szzz4OTA7yVFoqq6cpepWYYeJKGpno53qeg+WxHusq9TbWBS1T3UoFz+fwJBAO5XWpiMwAKYg1GtAxkgszIDnkj9Vhe/AL81fvc9KnYFScQQAiZlPN7MopH0n/oQM8jnXmkusQOmzpVlYBB0W5sCQQCDv7BIGPLfH45QlSMXsfTmTjNh3JPMdw9hZ2fCD5HxzJEdLE8cLs81iRyfdAbnzCo5YIeA68kGkJz4PRUMr0t1AkBChfcvZPmiv9bHUTbwKIRbjU78qFkDP7iBpfjOITBcyJUSODWhadhXh15IxrJwJV2O0au0Tmfx0PkQEb+CWDfJAkEAzJPemI3yVYqXG2POBolG5gK2VkHEw7QCQOmMK60Z+3H7U9F/AvoM3zpRujHBdRxdZlPSrCvbxhyavYhNXDqnjg==-----结束RSA私钥-----

解决方案

为什么 N 不等于 p * q ?

使用提供的密钥确认.但是,使用 openssl genrsa 1024 生成自己的密钥时,我无法复制.

$ ./test-rsa.exe***** P *****127165925889572050577202273628566023591621659185880081589280049047806178162653577549680003229073498679495770923055558696339499022301055839537975977118688137***** 问 *****10059832080410675679274931119486090017360564066559599189867309386706046720813347145402059918876964980032136051476889631968099168811652389989474036177869729***** N *****127931248913253271289716500205639992466284651287857358177145251825312810367993147780821624164062592337708505486275588028025122128928225266601591073331803580493341719724935049328478344297205955905466581637169109448199715137939448946445804542355907923908845024638480376219852266194827768486624319018352514599977*** 计算 N ***127926786079904340486324750015310657558743663036816604629670248604945247855865212421871439992814824964459404054462886419168595224468110358113599485755243718536935880977456835036272916419632947427885989469252242704342884476060911074859116149906854382812141105735147419775039435625802885168567201322191763704873

<小时>

$ cat test-rsa.c#include #include #include #include #include #include #include const char s_key[] = "-----开始 RSA 私钥-----
""MIICXAIBAAKBgQC2Lh4HLcCR76Wv3oXl6sZ7pv8l9b/66H+I6Bb86tz8RhWCmTCG
""xPVgtZ+w9WutU/rqBHHZOpotX4QDksRD8dRFh6a3HwkIFQdTcDoiD39yNP8F02Gd
""dAl8p/URC5jNCLMSfUK38wMocmoI1I5vqdMNrzUnOup18rl4089Z+faMKQIDAQAB
""AoGBAJrL4z5iWiengxqV8yETBeU8WcJft+n0dapXzHDNAUo8Izr+AIYEBp1Ot4se
""f4igu6zuae80JJ45c2u14p/5dWzN9/URmhTP8xLGjGCjltOJLLyhBPP+ZsLjqu6l
""57MNV6jDqDLdRC66w4NMRCN3FACxcldIC5L6B9OA7UvO1ugBAkEA8s1o6BvufTeD
""ktyOMfW0ZeLGk/6EXp8nf7BIzYhAAPtSt8DegnfYFx2XDgKnYSB15dTDIDMe/KaA
""GcuUb/ZjiQJBAMATb1fFdl7PGccVPgeTaupJayHPySc9PSsACV6VIAnpcU/3NZzd
""MkdIL/JsOsD+1M9uQJqvRZO4qQdjcR5Om6ECQEJGgYlB/pJdcePHomTOvcRF55CE
""G9u8M8rt8qFvvJDICWcxFUulrO16XT4syUWA1825it2iNqYeSL9By63YIokCQBnm
""RPw71xM/r8UleyDAYwlGbxi3EPOmkUnsDldfmltby/ixZ9xIA1CTTkvNBjsh4YY6
""4qE5AxPBMaGaahVhGiECQHyQvXUNE2IUco+ZwmmLnb2ey1s5tBg7i0lEZG47G7GV
""o+yKdJHpToJD8eRJA/2D+pMhQIZm8X/XDIoi1AQ/TRY=
""-----结束 RSA 私钥-----
";int main(int argc, char* argv[]){未使用(argc),未使用(argv);国际RC;文件* fd = NULL;EVP_PKEY* pkey = NULL;RSA* rsa = NULL;BIGNUM* n = NULL;BN_CTX* ctx = NULL;fd = fopen("./key.pem", "w+");如果(fd == NULL)退出(1);rc = fwrite(s_key, 1, sizeof(s_key), fd);if(rc != sizeof(s_key)) exit(2);rc = fseek(fd, 0, SEEK_SET);如果(rc != 0)退出(3);pkey = PEM_read_PrivateKey(fd, NULL, NULL, NULL);如果(pkey == NULL)退出(4);rsa = EVP_PKEY_get1_RSA(pkey);如果(rsa == NULL)退出(5);#如果 0fprintf(stdout, "
***** RSA *****
");RSA_print_fp(stdout, rsa, 0);#万一fprintf(stdout, "
***** P *****
");fprintf(stdout, "%s
", BN_bn2dec(rsa->p));fprintf(stdout, "
***** Q *****
");fprintf(stdout, "%s
", BN_bn2dec(rsa->q));fprintf(stdout, "
***** N *****
");fprintf(stdout, "%s
", BN_bn2dec(rsa->n));n = BN_new();如果(!n)退出(6);ctx = BN_CTX_new();如果(ctx == NULL)退出(7);rc = BN_mul(n, rsa->p, rsa->q, ctx);if(rc != 1) 退出(8);fprintf(stdout, "
*** Calc N ***
");fprintf(stdout, "%s
", BN_bn2dec(n));BN_CTX_free(ctx);BN_free(n);RSA_free(rsa);EVP_PKEY_free(pkey);fclose(fd);返回0;}

I've generated a key with openssl by using the following command

openssl genrsa 1024

I've got the following result

-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQC2Lh4HLcCR76Wv3oXl6sZ7pv8l9b/66H+I6Bb86tz8RhWCmTCG
xPVgtZ+w9WutU/rqBHHZOpotX4QDksRD8dRFh6a3HwkIFQdTcDoiD39yNP8F02Gd
dAl8p/URC5jNCLMSfUK38wMocmoI1I5vqdMNrzUnOup18rl4089Z+faMKQIDAQAB
AoGBAJrL4z5iWiengxqV8yETBeU8WcJft+n0dapXzHDNAUo8Izr+AIYEBp1Ot4se
f4igu6zuae80JJ45c2u14p/5dWzN9/URmhTP8xLGjGCjltOJLLyhBPP+ZsLjqu6l
57MNV6jDqDLdRC66w4NMRCN3FACxcldIC5L6B9OA7UvO1ugBAkEA8s1o6BvufTeD
ktyOMfW0ZeLGk/6EXp8nf7BIzYhAAPtSt8DegnfYFx2XDgKnYSB15dTDIDMe/KaA
GcuUb/ZjiQJBAMATb1fFdl7PGccVPgeTaupJayHPySc9PSsACV6VIAnpcU/3NZzd
MkdIL/JsOsD+1M9uQJqvRZO4qQdjcR5Om6ECQEJGgYlB/pJdcePHomTOvcRF55CE
G9u8M8rt8qFvvJDICWcxFUulrO16XT4syUWA1825it2iNqYeSL9By63YIokCQBnm
RPw71xM/r8UleyDAYwlGbxi3EPOmkUnsDldfmltby/ixZ9xIA1CTTkvNBjsh4YY6
4qE5AxPBMaGaahVhGiECQHyQvXUNE2IUco+ZwmmLnb2ey1s5tBg7i0lEZG47G7GV
o+yKdJHpToJD8eRJA/2D+pMhQIZm8X/XDIoi1AQ/TRY=
-----END RSA PRIVATE KEY-----

By using http://lapo.it/asn1js/ I've decompiled above pem and found out that

p = 12716592588957205057720227362856602359162165918588008158928004904780617816265357754968000322907349867949577092305558696339499022301055839537975977118688137

q = 10059832080410675679274931119486090017360564066559599189867309386706046720813347145402059918876964980032136051476889631968099168811652389989474036177869729

But in the mean time the modulus

n = 127931248913253271289716500205639992466284651287857358177145251825312810367993147780821624164062592337708505486275588028025122128928225266601591073331803580493341719724935049328478344297205955905466581637169109448199715137939448946445804542355907923908845024638480376219852266194827768486624319018352514599977

When it should equal:

N = 127926786079904340486324750015310657558743663036816604629670248604945247855865212421871439992814824964459404054462886419168595224468110358113599485755243718536935880977456835036272916419632947427885989469252242704342884476060911074859116149906854382812141105735147419775039435625802885168567201322191763704873

Why the hell N is not equal to p * q ?


EDIT:

Here is bunch of keys generated by my openssl, I'm using Mac OS X Mavericks, the first key has correct N, the second one incorrect, I haven't checked the others, but anyway this issue seems to be reproducing, I'm using the following openssl version "OpenSSL 0.9.8y 5 Feb 2013":

-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQDb4ZTDCASpFV+89RzD8MYR/xASV/piyXB3+qVq+PueDqq+45EL
Xt5UE2jXanfOh3uE3G3Fi76rm08XUC0CvFB7DxFJAMvchr5LbE9x2EMDmfpuZPOI
bDI+r+XZ+KJF++h296TOnncgnXILoD1gihkld7MS9g49TwsBPOtsMJzDRQIDAQAB
AoGBAMpGFfTormjhacZJcqHqIDwz+RP27TbtetJUuNHUpJw9f+PFMwxTxJFxnZP1
tKtAxWdu5GjDaq8xW6vlrNKEbD9jg2WU/myYffNeHxNVjivzypeQzBSmcE5LKFpM
objHkvXbBkkyX8Oh6ZF/3+NOhxOVZMH7CaZ90a+xPf7ENXJBAkEA+Zx/rwrx81+D
s79thCAUU4EnMVROGFPr/V7mt9AFXjAXHRuvg49Aon23bt48jdroakV5vk0ltKO8
Z5xnRWlGNQJBAOGCSOL+zFJd6zTM+CkbgGtml+DIunr7Avfu2mZyaMv4mLo+GTRN
ctZEKhknYfydewhORLKg51WdLThoe9VG6tECQCUyIvzMnr1rkE6qygEUXrMK3fJF
49VQPCxnhe4CO6qLdAZMZ90s7a7JGRqWV2O0KUoczEWFbYb7l0nBTspTI7kCQGmT
L0BmfY3KPoWXuE62e2bMvyoTj4pn3bnpbwIrafikSAxZaj9cSvkZLIReNbeomqMG
0Y63WdZxIWyZLfBppSECQQCEIkbINrQPJHoLtD57AbptUeyaE5lQBurzXMVf84FA
OJjd5OKmEX+LYbLguzOjvkcysNEZBRphz4L07shvscBC
-----END RSA PRIVATE KEY-----

-----BEGIN RSA PRIVATE KEY-----
MIICXgIBAAKBgQDTzIPHUoq9I+Fmdc8kdpuu6BSzLAmLsXv1FKXdHSYSmqI3HRTs
ZcYDSM1Vp/Svf6jdt2uNuNt0UaXzFowT9fi+sIFE2Zlpl8nEM66YZYHJfHQXy6GR
h2ybiNcDEigasc1wBvbkdSR9RNLUnLzX6YNY+197CY6vgW0R0pzuRRR/JQIDAQAB
AoGBAKAeu3mTM4QufhdB9WoxqR0gI5YZMtZDRd1Q0NxLTx89fGmCOPFHN93/ygx5
v4h2UKneIxevq2lS2MzgPOJSUMwn14/19iujT2+jC6vHKpwcjkGrnLXdsdjowrHJ
X3tnbZC4pS/2UU8r/QKzwX957+Idn4Mt2v2sDzQj5ZoPRtfBAkEA/GLl6BXQQp/4
ymsytyM6gleLdaIklCESUc6yZpY48HJqqg3lJwy/3bgb9fYlok/DPbyiEK/p+cXL
lXycbdA6HQJBANbU2MAwpBprkyliEvb+WAvyIGuf3xCVJq3CicuWfJphtMdUEsQm
cpGbQp/0bXUuFkks/xOFMKfBkAbn7Z5tCqkCQQCffcP56ScFo2AuUpXnA50q1zXr
LX7eGRQhnHRCvfXXhQaA1m0UQ0tQStNomJdpvewMrJLh5rj+PY+MtQWJo8fFAkBm
H5RR+E1qSc0RFRAS3eGY/CaxQrRVO7HBVAMRBp6A/QVk4/Bv0h8QXJAVXapS0+/A
JWW0L9JrTLZcsg/hCdDRAkEAmHZNomd/wptVccGwXtgXIL5ElQWLL/3WEggCqOIp
c+v9IRpKND9qn1zwu3tnBrrUbmC2M8CEOnuHP+lnumc2YQ==
-----END RSA PRIVATE KEY-----

-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQCWVkOkNXkWd2QoWudAD8rrzioby2g8k1pruaclCMo2mSns++TG
S3lWgLqS2mPynNONVbqoOedLKKnGY9HYzLCOCuoq5loOYCtIcVyBVGhx4eQrZgmU
AwRqQChztrj09+omveQQF2+QW9DJZrYSsKB836iTt5oAEA3ER6fwcV3fLQIDAQAB
AoGAQKNife4H3CMFS1yaZS7lHrIL5Nt2O+VXUU4HkaLP3t3H6v77BE9bIlhC3/VK
V/wZ8YDUupP64JPhO02b4k1P83oG5SAFTb0zZwmHI1+wVnNomq0DoRPw2710a2P4
Ya09nLbuRlm6SzsAkuwmyv+fPDas8b/m15kWSP/HTKMbAPkCQQDEUaTQUg/8sPH+
jDraHpjGtVRqjkysAZhNgMH+NGWLbk3nujZj4oMfid+4Xg4/Sr5EADqr0HrSlMnV
hhlwBCxjAkEAxAodCSmu9khiuRzMzXAc/gvqdtq+fF6Zx+rTUF5HYeD7l1u3SXes
whDku23Pp41+A4axWHXHTsDlKv49m9YzLwJBAJWIEl9SgjbYmBpouVL2RyvjZf8b
kC7bsCQoVJrJUicXx2MfpNoD6BgXrj4B9hwjVDT7b7T6wPKwveNTlwCJTT0CQGNJ
W/tQCTTi5F0soO1LYuOn1U/s6ZzDrM77t5p0pWKFN+copGOpIO4I8E+dBhauKqxO
g3Nx80eHmolzynAqxDECQEmyZq1mFEpB6buwNhRmj/kyOGmA88IbovZhBT+Un/6o
heaaMVl7Hst7nhihxQ081c3mFuwnH/mjixKKkpVens8=
-----END RSA PRIVATE KEY-----

-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQCm7mMUqExF5Nq2qzQ8gLVfq5AqKQlKm47Df4H/XqH9msGNCoIx
tnH4Tbe38tzA9TDRxxYQ6oCmTRUlKqstxb0j8NK7KV63vrxhLUlCIinMk9qcTL/T
tLm7/rBSZ7M6OjupzjjQ8Idu7Jd7HVITvFDYbDtd0uDh7Hd1GCrqrHnAoQIDAQAB
AoGABjMgVuoROx9OyC3/mKenFNCIYCh6Ad1ZJgWcTGG1Xnfa7GQRhcsi3Hf2dMx+
SmRQ1dmxBhvPf12phWHaTa7kYVvyXWVbp4OYPsU24/WuVfXysmA1FhO4OJMoTEqQ
FtNGmC05vhwNge+zuyiyj+4Rvhe4CRWeAlWQT9ucOZStoAECQQDdM7qny+KGMysi
sUttOal551Ow1GsM6vo990tZP5jKD/lYkLhi4GBtib66pdqyizUhQoS5stFgvUk9
ztc8cUKBAkEAwTEOaypn6oUtDZMAiIW8a0m0bNtkXRnSb6UaG6n3VEEz8wkjg2Kx
ZJWIl+vk1JZKlJUOWrH2FhJexEOMt20uIQJBAJWVS5341ABoTb0yI42DNsYG1qN3
ocSkigCpYDzEMvBBiR6JDwdeMBci1OWnDpM6a/1H3DUvZUOD/Slc3FQ1SwECQHfO
93UoWEeNjbIkXylLXt1eWSFFMcm3ENUiG73aO0MqKJBpM3fwhbiuL4afyUq5Zckd
Y0iFoupvPAwVJDhA4mECQQCG/UmJG+N0Stt3nn16QzJwwGu7djFXFgSYn8LGIrRM
E3pfC6OMcJ3exAR5t78Bth1VLbST2S2AWNaT0d0fsSA/
-----END RSA PRIVATE KEY-----

-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQC0n8+Te4265j0QqqTyV0QnGbU/v9YWqTWAbfvNwXE5nZuJoLuP
yzL4wjcZknBjQCBLsO64a9rxZx5fmL3R+kHjcF6S8OBB9NEXRk70D+vFgHjexGR9
mOk/SXRjfFfaC/pMiSmbuJMFvGCEcii/9tpm03xYWMvpkjn1UEX69BE+TwIDAQAB
AoGADkEebJEvmjRZVVtiMQ3Z/wv0VdeZ2af45O3JFW/Ss61QfQgGRU7P8vnAx2/b
FroU0mRgMoWwfaSZrQms0UlisaI5lEQu7LbhQZqwV+Bz9h784RAHyHLoTTcHRJ/+
TvRT/naCcwzXzHoSQrXmruIbMh6w0KeqVveA9ZI7RMaAZkECQQDpv0ZWZln4ZXD0
nK96Pv78b7GwRxsBrT3qHFEMEK60B6lMK61shJxFMehb6Nh4UXVth6J295WmphsK
me53CPf5AkEAxdHcdE3ofZwiEKjV3or9aSinZA+AjUw8AqlDxkIS3EGx9qkdQWv+
2tVHJDzlRv68PmkpFotWZyBfKbbKEwzKhwJBALt5ON3FG3X5Tl4yaR9f9TzcDKS4
cvWmUBk7etl1a9lip6s7AM4fkgKBY76Lg0sE8mzVsz09l95gLSIUkckQ/WkCQQC7
BpvAFfxt7ZTDXWy+d3f42SfRUVq/vEisV22tXsDIHxBrXR48wSb1rFkTaMN4aNR+
yRvApcHtxExUeu34Lsq3AkB3HOVsRBj1UlZluiScIEfk1PX2gd84/NBbxT/mhrqi
/wb8sw7ltPobNN7vxlSu5bZG3EfjgEyCCv4EcLNB/uY6
-----END RSA PRIVATE KEY-----

-----BEGIN RSA PRIVATE KEY-----
MIICXgIBAAKBgQDqvM6BgcFGPrwR2A8tnphtH30ruwvE3RBPZk0CUzuqh7BQrPsr
oGNxP0D6ulWg/yWn25ovWjm3ksZ2TaD1PA7PVb3FbzYI3kIQIPFDX6przLwC+faH
J9tqFL1tiMUhjV7Mu8HXx44hTCA8vVbe/GwHn8y1sIZ3FIZnqAlpaFE75QIDAQAB
AoGBAJCHBWKpoHV+pM8bx2SgNFtjuu7U8I8aSTOJ2jpnQuJhPwa9KryWuQN+HaUC
WzyQPAAY7tre45CKd1VZwJOdkcOam4gdRUqrLVSXfYojDCOwn7O7Fwql26v2z42G
YNu/6umdQhsnVCpfked43d/sLuZH4keO2BQVZIS7wxUMMlm1AkEA/CEZ2RuL3Sc5
70+cGyDZ3OOfD3k/Szzz4OTA7yVFoqq6cpepWYYeJKGpno53qeg+WxHusq9TbWBS
1T3UoFz+fwJBAO5XWpiMwAKYg1GtAxkgszIDnkj9Vhe/AL81fvc9KnYFScQQAiZl
PN7MopH0n/oQM8jnXmkusQOmzpVlYBB0W5sCQQCDv7BIGPLfH45QlSMXsfTmTjNh
3JPMdw9hZ2fCD5HxzJEdLE8cLs81iRyfdAbnzCo5YIeA68kGkJz4PRUMr0t1AkBC
hfcvZPmiv9bHUTbwKIRbjU78qFkDP7iBpfjOITBcyJUSODWhadhXh15IxrJwJV2O
0aU0Tmfx0PkQEb+CWDfJAkEAzJPemI3yVYqXG2POBolG5gK2VkHEw7QCQOmMK60Z
+3H7U9F/AvoM3zpRujHBdRxdZlPSrCvbxhyavYhNXDqnjg==
-----END RSA PRIVATE KEY-----

解决方案

Why the hell N is not equal to p * q ?

Confirmed with the key provided. However, I could not duplicate when generating my own key with openssl genrsa 1024.

$ ./test-rsa.exe

***** P *****
12716592588957205057720227362856602359162165918588008158928004904780617816265357
754968000322907349867949577092305558696339499022301055839537975977118688137

***** Q *****
10059832080410675679274931119486090017360564066559599189867309386706046720813347
145402059918876964980032136051476889631968099168811652389989474036177869729

***** N *****
12793124891325327128971650020563999246628465128785735817714525182531281036799314
77808216241640625923377085054862755880280251221289282252666015910733318035804933
41719724935049328478344297205955905466581637169109448199715137939448946445804542
355907923908845024638480376219852266194827768486624319018352514599977

*** Calc N ***
12792678607990434048632475001531065755874366303681660462967024860494524785586521
24218714399928148249644594040544628864191685952244681103581135994857552437185369
35880977456835036272916419632947427885989469252242704342884476060911074859116149
906854382812141105735147419775039435625802885168567201322191763704873


$ cat test-rsa.c

#include <stdio.h>
#include <stdlib.h>
#include <signal.h>

#include <openssl/bn.h>
#include <openssl/evp.h>
#include <openssl/rsa.h>
#include <openssl/pem.h>

const char s_key[] = "-----BEGIN RSA PRIVATE KEY-----
"
"MIICXAIBAAKBgQC2Lh4HLcCR76Wv3oXl6sZ7pv8l9b/66H+I6Bb86tz8RhWCmTCG
"
"xPVgtZ+w9WutU/rqBHHZOpotX4QDksRD8dRFh6a3HwkIFQdTcDoiD39yNP8F02Gd
"
"dAl8p/URC5jNCLMSfUK38wMocmoI1I5vqdMNrzUnOup18rl4089Z+faMKQIDAQAB
"
"AoGBAJrL4z5iWiengxqV8yETBeU8WcJft+n0dapXzHDNAUo8Izr+AIYEBp1Ot4se
"
"f4igu6zuae80JJ45c2u14p/5dWzN9/URmhTP8xLGjGCjltOJLLyhBPP+ZsLjqu6l
"
"57MNV6jDqDLdRC66w4NMRCN3FACxcldIC5L6B9OA7UvO1ugBAkEA8s1o6BvufTeD
"
"ktyOMfW0ZeLGk/6EXp8nf7BIzYhAAPtSt8DegnfYFx2XDgKnYSB15dTDIDMe/KaA
"
"GcuUb/ZjiQJBAMATb1fFdl7PGccVPgeTaupJayHPySc9PSsACV6VIAnpcU/3NZzd
"
"MkdIL/JsOsD+1M9uQJqvRZO4qQdjcR5Om6ECQEJGgYlB/pJdcePHomTOvcRF55CE
"
"G9u8M8rt8qFvvJDICWcxFUulrO16XT4syUWA1825it2iNqYeSL9By63YIokCQBnm
"
"RPw71xM/r8UleyDAYwlGbxi3EPOmkUnsDldfmltby/ixZ9xIA1CTTkvNBjsh4YY6
"
"4qE5AxPBMaGaahVhGiECQHyQvXUNE2IUco+ZwmmLnb2ey1s5tBg7i0lEZG47G7GV
"
"o+yKdJHpToJD8eRJA/2D+pMhQIZm8X/XDIoi1AQ/TRY=
"
"-----END RSA PRIVATE KEY-----
";

int main(int argc, char* argv[])
{
    UNUSED(argc), UNUSED(argv);

    int rc;
    FILE* fd = NULL;
    EVP_PKEY* pkey = NULL;
    RSA* rsa = NULL;
    BIGNUM* n = NULL;
    BN_CTX* ctx = NULL;

    fd = fopen("./key.pem", "w+");
    if(fd == NULL) exit(1);

    rc = fwrite(s_key, 1, sizeof(s_key), fd);
    if(rc != sizeof(s_key)) exit(2);

    rc = fseek(fd, 0, SEEK_SET);
    if(rc != 0) exit(3);

    pkey = PEM_read_PrivateKey(fd, NULL, NULL, NULL);
    if(pkey == NULL) exit(4);

    rsa = EVP_PKEY_get1_RSA(pkey);
    if(rsa == NULL) exit(5);

#if 0
    fprintf(stdout, "
***** RSA *****
");
    RSA_print_fp(stdout, rsa, 0);
#endif

    fprintf(stdout, "
***** P *****
");
    fprintf(stdout, "%s
", BN_bn2dec(rsa->p));

    fprintf(stdout, "
***** Q *****
");
    fprintf(stdout, "%s
", BN_bn2dec(rsa->q));

    fprintf(stdout, "
***** N *****
");
    fprintf(stdout, "%s
", BN_bn2dec(rsa->n));

    n = BN_new();
    if(!n) exit(6);

    ctx = BN_CTX_new();
    if(ctx == NULL) exit(7);

    rc = BN_mul(n, rsa->p, rsa->q, ctx);
    if(rc != 1) exit(8);

    fprintf(stdout, "
*** Calc N ***
");
    fprintf(stdout, "%s
", BN_bn2dec(n));

    BN_CTX_free(ctx);
    BN_free(n);
    RSA_free(rsa);
    EVP_PKEY_free(pkey);
    fclose(fd);

    return 0;
}

这篇关于openssl 生成的私钥不满足 n = p * q的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆