nodejs使用aes128ecb加密如何在c中解密

最近需要在nodejs上加密jwt,C#端解密jwt得到用户信息 class JwtService extends Service { encrypt(content) { const secretkey = this.app.config.jwt.key // 唯一(公共)秘钥 const cipher = crypto.createCipher('aes-128-ecb', secretkey) // 使用aes128加密 let enc = cipher.update(content, 'utf8', 'hex') // 编码方式从utf-8转为hex; enc += cipher.final('hex')// 编码方式转为hex; return enc }}却发现C#端怎么也解密不了,一直报错,改了一整天,后来终于发现,nodejs端加密用的key其实在使用之前已经使用md5加密了一次,服务端如果需要使用这个key解密,则需要也同样使用MD5加密 public static string AesDecrypt(string content, string key) { // nodejs aes加密默认的key使用了md5加密,所以C#解密的key也要默认使用md5 MD5 md5 = new MD5CryptoServiceProvider(); byte[] output = Encoding.UTF8.GetBytes(key); byte[] keyArray = md5.ComputeHash(output); byte[] toEncryptArray = HexStringToBinary(content); RijndaelManaged des = new RijndaelManaged(); des.Key = keyArray; des.Mode = CipherMode.ECB; des.Padding = PaddingMode.PKCS7; ICryptoTransform cTransform = des.CreateDecryptor(); byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); return Encoding.UTF8.GetString(resultArray); }代码使用了一个函数把16进制转成字节数组 ...

July 8, 2019 · 1 min · jiezi

Java代码使用BC库中org.bouncycastle.openssl.PEMWriter 的 代码示例

以下是显示如何使用org.bouncycastle.openssl.PEMWriter的最佳投票示例。 这些示例是从开源项目中提取的。 您可以对您喜欢的示例进行投票,您的投票将在我们的系统中使用,以生成更多好的示例。示例一 保存密钥和证书到文件中/** * 保存私钥和证书至文件 * @throws Exception / protected void saveKeyPairAndCertificateToFile() throws Exception { if(localPrivateKeyFile==null){ LOGGER.info(“not saving private key nor certificate”); return; } //Encode in PEM format, the format prefered by openssl// if(false){// PEMWriter pemWriter=new PEMWriter(new FileWriter(localPrivateKeyFile));// pemWriter.writeObject(localPrivateECKey);// pemWriter.close();// }// else{ String keyText = “—–BEGIN EC PRIVATE KEY—–\n” + Base64.encode(Unpooled.wrappedBuffer(localPrivateECKey.getEncoded()), true).toString(CharsetUtil.US_ASCII) + “\n—–END EC PRIVATE KEY—–\n”; Files.write(keyText, localPrivateKeyFile, CharsetUtil.US_ASCII); Files.write(localId.toString(), new File(localPrivateKeyFile.getParentFile(), “localPublic.hash”), CharsetUtil.US_ASCII);// } PEMWriter certificateWriter=new PEMWriter(new FileWriter(localCertificateFile)); certificateWriter.writeObject(cert); certificateWriter.close(); LOGGER.info(“Saved to “+localCertificateFile.getAbsolutePath()); }示例二 :对私钥进行加密/* * 加密私钥 * * @param key 私钥对象 * @param algorithm 密钥算法 * @throws NoSuchProviderException * @throws NoSuchAlgorithmException * @throws IOException / private void encryptedTest(PrivateKey key, ASN1ObjectIdentifier algorithm) throws NoSuchProviderException, NoSuchAlgorithmException, IOException { ByteArrayOutputStream bOut = new ByteArrayOutputStream(); PEMWriter pWrt = new PEMWriter(new OutputStreamWriter(bOut), “BC”); PKCS8Generator pkcs8 = new PKCS8Generator(key, algorithm, “BC”); pkcs8.setPassword(“hello”.toCharArray()); pWrt.writeObject(pkcs8); pWrt.close(); PEMReader pRd = new PEMReader(new InputStreamReader(new ByteArrayInputStream(bOut.toByteArray())), new PasswordFinder() { public char[] getPassword() { return “hello”.toCharArray(); } }); PrivateKey rdKey = (PrivateKey) pRd.readObject(); assertEquals(key, rdKey); }示例三 转换 rsa的私钥为 pem 字符串/* * 转换 rsa的私钥为 pem 字符串 * * @param rsaKeyPair RSA 类型keypair * @return PEM string / public static String getPEMStringFromRSAKeyPair(RSAKeyPair rsaKeyPair) { StringWriter pemStrWriter = new StringWriter(); PEMWriter pemWriter = new PEMWriter(pemStrWriter); try { KeyPair keyPair = new KeyPair(rsaKeyPair.getPublic(), rsaKeyPair.getPrivate()); //pemWriter.writeObject(keyPair); pemWriter.writeObject(keyPair.getPrivate()); //pemWriter.flush(); pemWriter.close(); } catch (IOException e) { log.warning(“Caught exception:” + e.getMessage()); return “”; } return pemStrWriter.toString(); }示例四 将pem 数据对象转换成 pem格式文件数据/* * 将pem 数据对象转换成 pem格式文件数据 * @param object * @return * @throws IOException */ public static byte[] toPem(Object object) throws IOException { ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); try (PEMWriter writer = new PEMWriter(new OutputStreamWriter(outputStream))) { writer.writeObject(object); writer.flush(); return outputStream.toByteArray(); } }示例五 将多份 certificate 对象写入文件private void writeCertificate(Certificate… certificates) throws IOException { final PEMWriter writer = new PEMWriter(new FileWriter(destfile)); for (final Certificate c : certificates) { writer.writeObject(c); } writer.close();}示例六 将 X509Certificate 转换成 pem格式数据public String x509CertificateToPem(final X509Certificate cert) throws IOException { final StringWriter sw = new StringWriter(); try (final PEMWriter pw = new PEMWriter(sw)) { pw.writeObject(cert); } return sw.toString();}示例七 将 rsa私钥对象转换为 PEM 格式数据public String rsaPrivateKeyToPem(final PrivateKey key) throws IOException { final PemObject pemObject = new PemObject(CCS_RSA_PRIVATE_KEY, key.getEncoded()); final StringWriter sw = new StringWriter(); try (final PEMWriter pw = new PEMWriter(sw)) { pw.writeObject(pemObject); } return sw.toString();}示例八 将私钥、证书文件等转换为 PEM数据private static byte[] getPemBytes(Object… objects) throws Exception { ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); try (PEMWriter pemWriter = new PEMWriter(new OutputStreamWriter(byteArrayOutputStream, UTF_8))) { for (Object object : objects) { pemWriter.writeObject(object); } } return byteArrayOutputStream.toByteArray();}示例九 将 X509Certificate 转换为PEM 数据private static String toPem(X509Certificate certificate) throws IOException { StringWriter stringWriter = new StringWriter(); PEMWriter pemWriter = new PEMWriter(stringWriter, BouncyCastleProvider.PROVIDER_NAME); pemWriter.writeObject(certificate); pemWriter.close(); return stringWriter.toString();}示例十 将多个 证书数据 写入文件private void writeCertificate(Certificate… certificates) throws IOException { final PEMWriter writer = new PEMWriter(new FileWriter(destfile)); for (final Certificate c : certificates) { writer.writeObject(c); } writer.close();}示例十一 将keyPair 转换成Pem格式private String keyPairToString(KeyPair keyPair) { StringWriter stringWriter = new StringWriter(); PEMWriter pemWriter = new PEMWriter(stringWriter); try { pemWriter.writeObject(keyPair); pemWriter.flush(); pemWriter.close(); } catch (IOException e) { throw new RuntimeException(“Unexpected IOException: " + e.getMessage(), e); } return stringWriter.getBuffer().toString();} ...

January 7, 2019 · 3 min · jiezi