java - 在 iOS (Swift) 上进行 RSA 签名并在 Java 中进行验证

标签 java ios swift rsa digital-signature

我在 iOS 上签署数据并在 Java 中验证它时遇到问题。

到目前为止我尝试了什么:

iOS( swift ):

 let text = "Hello World!"
 let publicKey = heimdall.publicKeyComponents()!
 let hashedText = text.sha512()

 let modulus = publicKey.modulus.base64EncodedStringWithOptions(NSDataBase64EncodingOptions(rawValue: 0))
 let exponent = publicKey.exponent.base64EncodedStringWithOptions(NSDataBase64EncodingOptions(rawValue: 0))
 let signature = heimdall.sign(hashedText.dataUsingEncoding(NSUTF8StringEncoding)!)!.base64EncodedStringWithOptions(NSDataBase64EncodingOptions(rawValue: 0))
 let verSig = NSData(base64EncodedString: signature, options: NSDataBase64DecodingOptions(rawValue: 0))

 let message: NSDictionary = ["text": text, "signature": signature, "modulus": modulus, "exponent": exponent ]

我正在使用 Swift Heimdall用于 RSA key 处理,消息通过 http 作为 JSON 发送。

在 Java 方面:

final byte[] signature = Base64.decodeBase64( message.getSignature() );
final byte[] modulus = Base64.decodeBase64( message.getModulus() ) ;
final byte[] exponent = Base64.decodeBase64( message.getExponent() );      
final String messageText = message.getText();      
final Signature sig = Signature.getInstance( "SHA512withRSA" );
final KeyFactory keyMaker = KeyFactory.getInstance( "RSA" );
final RSAPublicKeySpec pubKeySpec = new RSAPublicKeySpec( new BigInteger( modulus ), 
                                                          new BigInteger( exponent ) );      
final RSAPublicKey pubKey = (RSAPublicKey)keyMaker.generatePublic( pubKeySpec );

sig.initVerify( pubKey );
sig.update( messageText.getBytes() );
final boolean result = sig.verify( signature );

但结果总是错误的:-/ 据我所知,数据已正确传输。 也许我在搞乱编码。

最佳答案

我解决了这个问题,我删除了消息的初始散列(在 iOS 上)。然后一切正常。 Heimdall.sign 在签名之前已经对数据进行哈希处理。

关于java - 在 iOS (Swift) 上进行 RSA 签名并在 Java 中进行验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34274053/

相关文章:

objective-c - OS X编程中,如何保存和恢复Windows命令?

java - 需要 Web 开发插件,但适用于特定 Eclipse 安装

c# - 如何解决这个奇怪的多循环场景(Java 或 C#)?

java - Jaxb2Marshaller 无法通过 xsd 架构序列化 POJO : "cannot find the declaration of element"

ios - 如何在 UITableView 的选定单元格行中设置图像

ios - 为什么这个应用程序从 Testflight 运行时会崩溃 100%,而从 Xcode 运行时可能会崩溃 10%

ios - 如何在 swift 中使用 .a 静态库?

java - 推荐人

ios - 在 HealthKit 中请求授权 : why the result is always successful?

ios - 如何在混合 Xcode 项目(Objective-C 和 Swift)中使用 XCGLogger