Articles of rsa

Google Play应用内结算购买签名的服务器端validation失败

目前,我正在将Google Play应用内结算与我的androidgame项目相集成,我已经设置了一个Node.js服务器,并计划将Google Play购买响应的“originalJson”和“signature”值发送给服务器端validation。 然后我在我的Node.js服务器上进行了一些testing,首先这里是我购买的一个(从客户端获取)的“originalJson”和“签名”值: originalJson:{"orderId":"GPA.1312-8694-0319-25069","packageName":"com.shihu.sm.testin","productId":"com.shihu.sm.testin.diamond","purchaseTime":1452598011176,"purchaseState":0,"developerPayload":"{\"iabProductId\":\"com.shihu.sm.testin.diamond\",\"gOrderId\":\"2cb77de1a2a94db18b6df84f8037ea5b\",\"serverId\":\"6\",\"productId\":\"202\"}","purchaseToken":"bjoncdcebeclpklebmadidgb.AO-J1OyEbKLL0rhWQAc1hjdWyJPXHkAoHZTfZasqUuFWKWyAlnj-opiDLYILNRpnWgcblO8vV37fWf0kpeNMRZcgRT-fRxAO4P8VQPmU-TJakB-sCiRx8sUxL4nxnUBMnZdFWdpaIZDW5tP3Ck4aO57n1o66PwnjZw"} signature:JdfwMxprv7iMbI5YnVIWXLEAqiDhAQQva2IdfxtmhqBvLNU4Msi8sj31mnrVJfShxNmQI3zhlNUrCCaXdraFM0/y8O4PoZWYr+PFjCmlMovhG+ldeImEu7x52GLoQ7DsO8Yh4aLYmxemezFc1RjcSpq+l6Zzu9T6j3fHjLfQ060SEFapZITI/poxlFyvJX3bHhF9wGP54tL6pGjB/7fBEqTM1zHXUYeZyz+4akqV8oODlIWwMKhvN5tX/Zra9kh9hm0bnJT/1YWso3tLlT/WTK9nsP1l/lTnEXvgzq9QVSGbT/cpD7KSbR5N4i/NmPYAlCOvesW9OlRD05L8yytpBw== 然后我写了下面的代码用“RSA-SHA1”algorithm和“base64”签名编码进行validation: var crypto = require('crypto'); console.log('start verification'); var public_key = "—–BEGIN PUBLIC KEY—–" + "\r\n" + "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAg+VmzvTvb856ur/J+PWC" + "\r\n" + "gFRhLYV/chAuWzUuqlIh5gnYz1RFOYymCWAKP3wguol8YSe/72zEqAvPutBU2XVj" + "\r\n" + "zx3sHT+GUInbKjgZHzxw0viPh//OfaooEvEFMz9C6J8ABwpGNQUpACmyw12ZKshP" + "\r\n" + "HCJ6PZV+nsWry6PEZgnYCF7w5SDP4GY2tr3Q5D0iQwoALA40KYQfsKZ6pI5L8bDT" + "\r\n" + "2MLTFoemg/npeARy9HYkbonPatBhWjp2flzBRcyQx7DyQ7csLvPl5AGHRT4h5RBq" + "\r\n" + "RlLj+DBgNDAdwvHGyfhbTz7fPsT6xn7qifxAN+2gQsemSVmhi15zECF/k5MtTiOF" + "\r\n" + "owIDAQAB" + "\r\n" + "—–END PUBLIC KEY—–"; verifier= crypto.createVerify("RSA-SHA1"); […]

RSA Javaencryption和Node.js解密不起作用

我有一个系统需要在javascript中生成RSA密钥对,然后将公钥存储在服务器端的数据库中(作为string),然后在Java中的服务器端将使用存储的公共密钥encryptionstring密钥并发送到客户端,用私钥解密string。 我在客户端浏览器上使用节点rsa的browsified版本。 首先在客户端,我生成一个密钥对并导出密钥,将它们存储为string var NodeRSA = require('node-rsa'); var key = new NodeRSA({b: 1024}); key.exportKey("pkcs8-private"); key.exportKey("pkcs8-public-pem"); 导出的私钥存储在服务器的客户端和公共端 接下来,我用java来encryption一个接收到公钥的string,所以我把pkcs8公钥parsing成一个Java PublicKey对象。 String pubKey = "<Retrieved pkcs8 public key>"; pubKey = pubKey.replaceAll("(-+BEGIN PUBLIC KEY-+\\r?\\n|-+END PUBLIC KEY-+\\r?\\n?)", ""); byte[] keyBytes = Base64.decodeBase64(pubKey); X509EncodedKeySpec spec = new X509EncodedKeySpec(keyBytes); KeyFactory kf = KeyFactory.getInstance("RSA"); PublicKey pk = kf.generatePublic(spec); 并用它encryption文本 byte[] cipherText; Cipher cipher […]

麻烦encryption在iOS上和使用RAW RSA在Node.js解密

我正在尝试在iOS端encryption一些东西,并在我的node.js服务器上解密它。 在服务器上,我正在使用库伪造。 我能够encryption一些东西,并在node.js上进行解密,而且工作。 我这样encryption: const encryptedPassword = publicKey.encrypt(password, 'RAW'); 并像这样解密: const password = privateKey.decrypt(encryptedPassword, 'RAW'); 。 现在,我不想在服务器上进行encryption,而是想在我的iOS应用上进行encryption,但仍然使用相同的方式进行解密。 我发现这个库,swift-rsautils。 https://github.com/btnguyen2k/swift-rsautils/blob/master/Swift-RSAUtils/RSAUtils.swift它有这个函数称为encryptWithRSAKey ,这就是我正在使用的。 由于是原始encryption,我试图通过填充SecPaddingNone。 但是,不幸的是,它不起作用,我无法解密在服务器上。 错误信息是无效的长度,并且base64数据的长度似乎要大得多。 有谁知道我可以如何解决这个问题? 这是我的iOS代码: let dataString = text.dataUsingEncoding(NSUTF8StringEncoding) let certificateLabel = "certificate" let certificateRef = self.getCertificateFromKeyChain(certificateLabel) let certificateData = self.getDataFromCertificate(certificateRef) let cryptoImportExportManager = CryptoExportImportManager() let publicKeyRef = cryptoImportExportManager.importPublicKeyReferenceFromDERCertificate(certificateData) let encryptedData = self.encryptWithRSAKey(data, rsaKeyRef: publicKeyRef!, […]

XML到PEM在Node.js

由于我对encryption技术知之甚less,所以我被encryptionAPI所困住了。 我有这个 XML: <RSAKeyValue> <Modulus>1znidPBIcMcO7K/53tkTSyKqxlG5Mcws8kVtijS4tyEU4W/FEVWYpOtv+Stnb4Vt</Modulus> <Exponent>AQAB</Exponent> </RSAKeyValue> Signature: rNbdUP-p4pEGfwQSwR6VPvAVZ-sZu-ptgw8SofYYmNTlfUB9iUbb593eCAuT5jsqDTC Original data: <xml>…some big xml…</xml> 我想validation签名,我该怎么做? (我正在使用节点v0.10.18)

RSAloginnode.js并在C ++中validation

我正在努力保护从node.js服务器发送到C ++应用程序的消息。 从node.js,我创build了一个密钥对。 我正在使用node-rsa读取node.js端的公钥( https://github.com/rzcoder/node-rsa ) var rsa = new nodeRSA(publicKeyBuffer ,{encryptionScheme :'pkcs1'}) 由于我的信息可能会很长,所以在调用encryption之前,我会计算一条消息的盐渍sha256。 const hash = crypto.createHash('sha256').update(message + config.signSalt).digest('hex') 这部分工作正常,因为我能够在C ++端生成完全相同的散列。 然后,我调用node-rsa的encryption函数来生成一个缓冲区 const signature = rsa.encrypt(hash) 我尝试过各种编码,但由于数据是通过websocket(+ MsgPack打包)发送的,二进制格式是一个很好的select 在C ++方面,我首先阅读char []的键 const char keyStr[] = "—–BEGIN RSA PRIVATE KEY—–\n" ………. BIO* bio = BIO_new_mem_buf(keyStr, (int)strlen(keyStr)); // -1: assume string is null terminated m_rsaPrivKey = […]