Java 如何使用加密密钥对iOS下的字符串进行签名?

Java 如何使用加密密钥对iOS下的字符串进行签名?,java,python,ios,cryptography,rsa,Java,Python,Ios,Cryptography,Rsa,我用Java创建了密钥。私钥是PKCS#8加密的,采用PEM字符串 以下是在Python中使用带有M2Crypto的私钥的示例: 来自M2Crypto导入执行副总裁,BIO privpem="-----开始加密私有这一词的意思是一个词的意思是,例如,这个词的意思意思是指,例如,例如,在一个词中,一个词的意思是,一个词的意思是,这个词的意思是指一个词的意思是,一个词的意思是,这个词的意思是一个词的意思是,这个词的意思是一个单词的意思是一个单词的意思是一个单词的意思是一个单词的意思是一个单词,这个单

我用Java创建了密钥。私钥是PKCS#8加密的,采用PEM字符串

以下是在Python中使用带有M2Crypto的私钥的示例:

来自M2Crypto导入执行副总裁,BIO
privpem="-----开始加密私有这一词的意思是一个词的意思是,例如,这个词的意思意思是指,例如,例如,在一个词中,一个词的意思是,一个词的意思是,这个词的意思是指一个词的意思是,一个词的意思是,这个词的意思是一个词的意思是,这个词的意思是一个单词的意思是一个单词的意思是一个单词的意思是一个单词的意思是一个单词,这个单词的意思是一个单词的意思是一个单词的意思是一个单词的意思是一个单词的意思是一个单词的意思是一个单词的意思是一个单词或者一个单词或者一个单词的意思是一个单词或者一个单词或者一个单词或者一个单词的意思是一个单词的意思是一个单词的意思是一个单词或者一个单词或者一个单词或者一个单词或者一个单词或者一个单词或者一个单词或者一个单词或者一个或者一个或者一个或者一个单词6\njpsV/musVaohLhFMFAzQ87FeGvz/8月8日,8月8日,8月8日,8月8日,8月8日,8月8日,8月8日,8月8日,8月8日,8月8日,8月8日,8月8日,8月8日,8月8日,8月8日,8月8日,8月8日,8月8日,8月8日,8月8日,8月8日,8月8日,8日,8月8日,8月8日,8日,8月8日,8日,8日,8日,8月8日,8月8日,8日,8日,8日,8日,8日,8日,8日,8日,8月8日,8日,8日,8日,8日,BBBBBBBBGGGGZZZZZZZZZZZZZZZZZZZZZZZZGGGGGGTTTTTTTTYYIFZ7HS7H7JBYLBAGQJGZV9EA3XTMY+DIPMdepqu9M\nxazmmyjctdlafbybwsfsbu5k6pm6+bwt6mpsuvyqbrp3h84bdrlbkntxugwmtb4dkmzhms3gsy\nWmHGb1N+rn7xLoA70a3U/duli7lpkwbx9sz7n8jlh3cm6jjumubmbaghiqkz2mf6qlnholvl\nFiG6AY+wpU4mzm6ny6k+p4lL4lLm9d5rnny1lLI/c36pkemqwjkjkjkjkjkjkwx0=\END加密私钥
msg=“这是一条消息。”
privkeybio=BIO.MemoryBuffer(privpem)
privkey=EVP.load_key_bio(privkeybio)#pw:123456
privkey.sign_init()
privkey.sign\u更新(msg)
打印privkey.sign_final().encode('base64'))
下面是我如何在Java中使用PEM(去掉页眉和页脚)的示例:

String msg=“这是一条消息。”;
字符串privpem=”2.在中国,一个研究领域的一个研究领域的一个研究领域的一个研究领域的一个研究领域的一个研究领域的一个研究领域的一个研究领域的一个研究领域的一个研究领域的一个研究领域的一个研究领域的一个研究领域的一个研究领域的一个研究领域的一个研究领域的一个研究领域的一个研究领域,一个研究领域的一个研究领域的一个研究领域的一个研究,一个研究领域的一个研究领域的一个BBBZZZZZZBBBBBQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ,或者或者是一个研究的一个研究,或者是一个研究,或者是一个研究,或者或者是一个或者或者或者一个(或者或者或者一个或者或者或者一个研究(或者或者或者或者或者V/musVaohLhFMFAzQ87FeGvz/W8dyS9BtA研究对象是一个研究领域,一个研究领域是一个研究领域,一个研究领域是一个研究领域。一个研究领域是FX6KFXXXXXXXXXXXXXXXXXXFXXXFXXKKFKKKKKKKKKKKKFZZVVVXVXLVXLVXLVXLXLXLXXXXXXXXXXLXXXXXXLXXXXXXXXXXXLXXXXXXXXXXXXXLXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXL4++++++4+4+4+4+4+4+4+PF4+PF4+4+PF4+4+4+4+PF4+4+4+4+4+4+4+4+4+4+4+4 7H7JBYLBAGQJGZV9EA3XTMY+DIPMdepqu9M\nxazmmyjctdlafbybwsfsbu5k6pm6+Bwt6mPsuvYQBrP3h84BDRlbkntxUgaWmTB4dkmzhMS3gsY\nWmHGb1N+rn7xLoA70a3U/duli7lpkwbx9sz7n8jlh3cm6jjumubmbaghiqkz2mf6qlnholvl\nfig6y+wpu4mzmzm6k+p4mNy6k+p4lLsllii/m5c36pkeqbwjjjklmWDx0=“;
字节[]privkeybytes=Base64.decode(privpem);
EncryptedPrivateKeyInfo encprivki=新的EncryptedPrivateKeyInfo(privkeybytes);
Cipher Cipher=Cipher.getInstance(encprivki.getAlgName());
PBEKeySpec PBEKeySpec=新的PBEKeySpec(“123456.tocharray());
SecretKeyFactory secFac=SecretKeyFactory.getInstance(encprivki.getAlgName());
密钥pbeKey=secFac.generateScret(pbeKeySpec);
AlgorithmParameters algParams=encprivki.getAlgParameters();
cipher.init(cipher.DECRYPT_模式,pbeKey,algParams);
KeySpec pkcs8KeySpec=encprivki.getKeySpec(密码);
KeyFactory kf=KeyFactory.getInstance(“RSA”);
PrivateKey pk=kf.generatePrivate(pkcs8KeySpec);
Signature sig=Signature.getInstance(“SHA1withRSA”);
sig.initSign(pk);
信号更新(msg.getBytes(“UTF8”);
字节[]signatureBytes=sig.sign();
字符串b=Base64.encodeBytes(signatureBytes,Base64.DO\u BREAK\u line);
System.out.println(b);//显示字符串。
在iOS中如何做到这一点?我已经看过加密练习,特别是SecKeyWrapper,但是有很多东西在那里进行,我无法理解

我个人不打算做iOS开发,但我需要一些代码给开发人员,以至少或多或少地展示如何做。开发人员更像是一个UI类型,不熟悉加密。(我也是,但这是一个不同的故事…)


在我们讨论这个问题时,如何根据字符串公钥PEM验证签名?我不会在这里介绍Java和Python示例,因为它们非常简单。

上周我也遇到了同样的问题。iOS上的CommonCrypt库非常适合对称密钥加密,但处理密钥环太麻烦,无法简单地进行加密公开密钥的东西。在花了大约半个小时的时间研究它之后,我只加入了OpenSSL。使这个设置变得很简单-只需放下项目和OpenSSL tarball,将您的目标设置为链接到libssl,就可以了


OpenSSL代码看起来与M2Crypto代码几乎相同。

这看起来很有希望。你有没有可能发布一些(伪)代码?我既不知道C也不知道Objective C,所以尽管看了文档和一些在线示例,我还是不太可能有一个“这是怎么做的”示例。