RSA加密解密(直接使用openssl生成的公私鑰)
期初做加密的時候就是想要直接使用openssl生成的公鑰和私鑰,搗鼓了好久才弄出來,昨天將檔案的方式做出來以後反覆比較加密過程。最終了解到,解密的過程中需要的私鑰是需要一個“頭”的。而這個所謂的“頭”其實就是我們生成的pem檔案的一些配置項。
在上一篇文章RSA加密解密(讀取檔案) 中知道了通過openssl在終端生成證書的時候需要填寫,countr、Provice、organizer等配置項的。
而且網上也是有一些demo講解rsa加密解密的,而且使用起來還是不錯的。例如RSAdemo 這個裡面也帶有自己的公私鑰,但是當我們將自己生成的pem檔案中的公私鑰替換掉巨集定義的時候就會出現加密通過,但是解密為nil的情況。
如果你仔細研究你會發現你的私鑰長度和demo中的私鑰長度是不一樣的。原來我們的私鑰是不同的。那麼既然公鑰可以就說明公鑰確實是從pem檔案直接取出來使用的。由這樣的邏輯一般都會想當然的以為,私鑰同樣也是直接取pem檔案,這樣就錯了。因為我們pem檔案的私鑰和demo中的是不同的,上面已經提到,起碼長度都不一樣。
那麼怎麼得到相同格式的私鑰呢?或者說demo中的私鑰是什麼格式的呢?下面就說一下。其實demo中用的不是pem檔案中的私鑰,而是經過pem重新合成的新檔案,經過PKCS#8編碼的新檔案。而pkcs中的私鑰才是我們需要的私鑰,但是我們用文字是打不開的,只能通過程式碼讀取檔案的內容了。這裡就不詳述操作步驟了,因為我們還有另一種方式,比合成檔案並讀取內容要方便的多。
其實說這麼多就是為了獲得一個有效的私鑰,那麼能不能經過程式碼處理將我們的私鑰變成合法的呢?答案當然是可以的。而且程式碼中也有這樣的操作。
在程式碼中有這樣一個方法,+ (NSData )stripPrivateKeyHeader:(NSData )d_key;這個方法就是處理私鑰的頭部配置項的程式碼。如果我們將這個註釋掉就會發現我們的程式碼竟然成功了。看到這裡大家也就會明白,我在RSA加密解密(讀取檔案) 中生成的各個檔案的作用了。