長い研究の後、私はライブラリを使用するのではなく、何が起こっているのか理解していない自分のソリューションを実装しました。何が起こるかを知ることは常に良いことであり、この場合ロケット科学ではありません。
iOSでは、暗号化/復号化を行う場合は、キーチェーンに格納されているキーを使用する必要があります。私の場合、私は公開鍵が与えられているので、私はそれをインポートすることができ、私は秘密鍵でも同じことをすることができます。私のHelperClass Hereを見てください。
func SecKeyEncrypt(_ key: SecKey,
_ padding: SecPadding,
_ plainText: UnsafePointer<UInt8>,
_ plainTextLen: Int,
_ cipherText: UnsafeMutablePointer<UInt8>,
_ cipherTextLen: UnsafeMutablePointer<Int>) -> OSStatus
:
その後、唯一のiOSの10から、あなたはiOSの10前にしたい場合は、機能を持って暗号化し、また
let error:UnsafeMutablePointer<Unmanaged<CFError>?>? = nil
let plainData = "A Plain text...".data(using: .utf8)
if let encryptedMessageData:Data = SecKeyCreateEncryptedData(publicSecKey, .rsaEncryptionOAEPSHA256, plainData! as CFData,error) as Data?{
print("We have an encrypted message")
let encryptedMessageSigned = encryptedMessageData.map { Int8(bitPattern: $0) }
print(encryptedMessageSigned)
if let decryptedMessage:Data = SecKeyCreateDecryptedData(privateSecKey, .rsaEncryptionOAEPSHA256, encryptedMessageData as CFData,error) as Data?{
print("We have an decrypted message \(String.init(data: decryptedMessage, encoding: .utf8)!)")
}
else{
print("Error decrypting")
}
}
else{
print("Error encrypting")
}
を復号化するため、この2つのメソッドを呼び出すことができますそして
func SecKeyDecrypt(_ key: SecKey,
_ padding: SecPadding,
_ cipherText: UnsafePointer<UInt8>,
_ cipherTextLen: Int,
_ plainText: UnsafeMutablePointer<UInt8>,
_ plainTextLen: UnsafeMutablePointer<Int>) -> OSStatus
しかし、これらのオプションは少なく、かなりびっくりします。
Android上で生成し、私の公開鍵と秘密鍵が
public static String createStringFromPublicKey(Key key) throws Exception {
X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(key.getEncoded());
return new String(Base64.encode(x509EncodedKeySpec.getEncoded(), Base64.NO_WRAP), "UTF-8");
}
と
public static String createStringFromPrivateKey(Key key) throws Exception {
PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(key.getEncoded());
return new String(Base64.encode(pkcs8EncodedKeySpec.getEncoded(), Base64.NO_WRAP), "UTF-8");
}あなたのエラーやバリケードが何であるかを
わからないを使用していることを言及する価値!このプロセスは、ECBブロック暗号とOAEPパディングを使用してRSAにあるサーバーで共有されている公開鍵を取得して、パスワードの暗号化メッセージを生成してサーバーに返す必要があるようです。 OAEPWithSHA-256AndMGF1Paddingは非常に珍しいものですので、これをサポートするライブラリを確認してください。 – carbonr
公開鍵はサーバによって与えられます。だから私は、サーバーがメッセージをdecyptingするための秘密鍵を持っていると仮定します。私は提供された公開鍵と仕様を使ってメッセージをどのように暗号化できるかを知りたい。 –
"私はこれまでにこれらのライブラリを試しました..." ...そして?何が悪かったのか?これらの試みのいずれかのコードはどこにありますか? –