Tag: cryptography

将字节数组转换为X.509证书

我正在尝试将一段Java代码移植到.NET中,该代码采用Base64编码的字符串,将其转换为字节数组,然后使用它生成X.509证书以获取RSA加密的模数和指数。 这是我试图转换的Java代码: byte[] externalPublicKey = Base64.decode(“base 64 encoded string”); KeyFactory keyFactory = KeyFactory.getInstance(“RSA”); EncodedKeySpec publicKeySpec = new X509EncodedKeySpec(externalPublicKey); Key publicKey = keyFactory.generatePublic(publicKeySpec); RSAPublicKey pbrtk = (java.security.interfaces.RSAPublicKey) publicKey; BigInteger modulus = pbrtk.getModulus(); BigInteger pubExp = pbrtk.getPublicExponent(); 我一直在试图找出将其转换为.NET的最佳方法。 到目前为止,我已经想出了这个: byte[] bytes = Convert.FromBase64String(“base 64 encoded string”); X509Certificate2 x509 = new X509Certificate2(bytes); RSA rsa = (RSA)x509.PrivateKey; RSAParameters rsaParams […]

Java BouncyCastle ECC密钥和自签名证书

几个小时以来,我一直在寻找一个用于创建椭圆曲线(EC)密钥和自签名证书的Java示例。 到目前为止,我只发现了片段和示例,其中许多都不起作用。 更新: 我在这里取得了一些进展,这是我的代码,对于任何可能发现它有用的人来说! 只需要弄清楚如何自我签名吧! import org.bouncycastle.asn1.x500.X500Name; import org.bouncycastle.jce.ECNamedCurveTable; import org.bouncycastle.jce.provider.BouncyCastleProvider; import org.bouncycastle.jce.spec.ECParameterSpec; import org.bouncycastle.operator.ContentSigner; import org.bouncycastle.operator.ContentVerifierProvider; import org.bouncycastle.operator.jcajce.JcaContentSignerBuilder; import org.bouncycastle.operator.jcajce.JcaContentVerifierProviderBuilder; import org.bouncycastle.pkcs.PKCS10CertificationRequest; import org.bouncycastle.pkcs.PKCS10CertificationRequestBuilder; import org.bouncycastle.pkcs.jcajce.JcaPKCS10CertificationRequestBuilder; import java.security.*; /** * A simple example showing generation and verification of a PKCS#10 request. */ public class genECKeyExample { private static final String BC = BouncyCastleProvider.PROVIDER_NAME; public […]

RSA:如何在java中生成私钥并在C#中使用它?

我想在java中生成私钥,将其保存为某个文件中的64个基本编码字符串,然后使用此保存的文件加密C#中的某个短语。 我知道在java中生成密钥并用64 base编码。 我的问题是如何在C#中使用此密钥? 这是一个将私钥保存到文本文件中的java代码原型: KeyPairGenerator keyGen = KeyPairGenerator.getInstance(“RSA”); RSAKeyGenParameterSpec spec = new RSAKeyGenParameterSpec(1024, RSAKeyGenParameterSpec.F4); keyGen.initialize(spec); KeyPair keyPair = keyGen.generateKeyPair(); PrivateKey privateKey = keyPair.getPrivate(); writeToFile(“privateKey”, Base64.encode(keyPair.getPrivate().getEncoded())); 我想在C#中实现以下函数,但无法找到如何从私钥创建RSAParameters或RSACryptoServiceProvider public static string DecryptData(string privateKey64Base, string data64Base) { // create using privateKey64Base // create RSACryptoServiceProvider rsa using RSAParameters above // byte[] encryptedData = rsa.Encrypt(Convert.FromBase64String(data64Base); }

是RC4还是ARCFOUR? 使用SecretKeySpec时出现InvalidKeyException?

我尝试在我的电脑上运行我的应用程序,但我不断得到这个东西。 我有可能错过一些图书馆吗? fabsam.crypto.CryptoException: java.security.InvalidKeyException: No installed provider supports this key: javax.crypto.spec.SecretKeySpec at fabsam.crypto.RC4Decoder.decode(RC4Decoder.java:37) ~[bin/:na] … (skipped my projects stack trace) at java.lang.Thread.run(Thread.java:662) [na:1.6.0_25] Caused by: java.security.InvalidKeyException: No installed provider supports this key: javax.crypto.spec.SecretKeySpec at javax.crypto.Cipher.a(DashoA13*..) ~[na:1.6] at javax.crypto.Cipher.init(DashoA13*..) ~[na:1.6] at javax.crypto.Cipher.init(DashoA13*..) ~[na:1.6] at fabsam.crypto.RC4Decoder.decode(RC4Decoder.java:27) ~[bin/:na] … 5 common frames omitted Caused by: java.security.InvalidKeyException: No installed […]

Javascript / NodeJS等效代码为Java代码Cipher.doFinal(byte )?

我正在将一些服务器端Java代码迁移到新的NodeJS服务器。 我正在寻找Javascript中的等效方法调用到Java的Cipher.doFinal(byte [])注意我不能使用NodeJS缓冲区,因为它们不支持负字节值。 所以要进行加密,我需要一个接受正数和负数数组的方法。 以下是我目前所有与此问题相关的内容: 节点JS / Javascript: var crypto = require(‘crypto’); var cipher = crypto.createCipher(‘aes256’,key); Java(javax.crypto.Cipher): Cipher cipher; SecretKeySpec skeySpec = new SecretKeySpec(key, “AES”); try { cipher = Cipher.getInstance(“AES”); } catch (NoSuchAlgorithmException e) { } catch (NoSuchPaddingException e) { }try { cipher.init(Cipher.ENCRYPT_MODE, skeySpec); } catch (InvalidKeyException e) { } 稍后在Java代码中,我调用此方法,其中Iv表示初始化向量: byte[] newIv = cipher.doFinal(myIv); […]

Java RSA加密不可重复?

我一直无法使用RSA公钥加密。 以下是重现问题的示例JUnit代码: public class CryptoTests { private static KeyPair keys; @BeforeClass public static void init() throws NoSuchAlgorithmException{ KeyPairGenerator keyGen = KeyPairGenerator.getInstance(“RSA”); SecureRandom random = CryptoUtils.getSecureRandom(); keyGen.initialize(2176, random); keys = keyGen.generateKeyPair(); } @Test public void testRepeatabilityPlainRSAPublic() throws EdrmCryptoException, InvalidKeyException, NoSuchAlgorithmException, NoSuchPaddingException, IllegalBlockSizeException, BadPaddingException{ byte[] plaintext = new byte [10]; Random r = new Random(); r.nextBytes(plaintext); Cipher […]

CryptoAPI C ++使用AES与Java互操作

我正在尝试使用CryptoAPI在C ++中加密并使用SunJCE解密Java。 我已经获得了RSA密钥 – 并在测试字符串上进行了validation。 但是,我的AES密钥不起作用 – 我得到javax.crypto.BadPaddingException: Given final block not properly padded 。 C ++加密: // init and gen key HCRYPTPROV provider; CryptAcquireContext(&provider, NULL, MS_ENH_RSA_AES_PROV, PROV_RSA_AES, CRYPT_VERIFYCONTEXT); // Use symmetric key encryption HCRYPTKEY sessionKey; DWORD exportKeyLen; CryptGenKey(provider, CALG_AES_128, CRYPT_EXPORTABLE, &sessionKey); // Export key BYTE exportKey[1024]; CryptExportKey(sessionKey, NULL, PLAINTEXTKEYBLOB, 0, exportKey, &exportKeyLen); // skip […]

加密javascript中的字符串和java中的解密

我想知道是否有人知道任何库在javascript和java解密加密。 我已经尝试了很多API,但是在java中获得的不是相同的值。 我想要公钥 – 私钥加密,因此尝试使用RSA。 我很少使用的是: http://www-cs-students.stanford.edu/~tjw/jsbn/ http://ats.oka.nu/titaniumcore/js/crypto/readme.txt http://www.ohdave.com/rsa/ 我检查的东西很少,javascript将字符串分成小块然后加密它们,这使得密码文本在java和javascript中不同。 我编辑javascript代码使用字符串作为一个整体但没有工作。 我也尝试将html页面的charset设置为utf-8,但它也没有用。 我成功加密像’K’这样的单字符串正确加密和解​​密,这让我觉得加密javascript中的字符串是有问题的,把它分成小块(我检查过,但它失败了加密它作为一个整个)。 我的java实现是: BigInteger d = new BigInteger(“1f3fac65c4ae222e3a3074dd4c38fbb72c0705c4bbac0385b867c12c25a44e01”, 16); BigInteger e = new BigInteger(“65537”); BigInteger N = new BigInteger(“b42e91fbca364cf2a125aec67ffbdab624fd401100c40ea05189ba34d1028b0d”, 16); String messageToEncrypt = “kishor”; byte [] messageByte = messageToEncrypt.getBytes(); BigInteger message = new BigInteger(messageByte); //Encrypting and Decrypting messages //Encrypt a message using N and […]

从字节数组创建PrivateKey

有没有办法从字节数组生成PrivateKey? 我使用getEncoded()方法得到了这个字节数组,但现在我必须将它转换回PrivateKey。 谢谢,Vuk

在JCA中为TLS定义密码套件

我希望使用JCA在TLS中支持以下密码套件: TLS_PSK_WITH_3DES_EDE_CBC_SHA TLS_PSK_WITH_AES_128_CBC_SHA TLS_PSK_WITH_NULL_SHA TLS_PSK_WITH_AES_128_CBC_SHA256 TLS_PSK_WITH_NULL_SHA256 它们在JDK7中可用,但不在JDK6中 ,而不是BouncyCastle。 如果我想在JDK6中获得支持,我是否可以使用SPI,JSSE的提供程序和回调方法扩展JCA以实现对这些PSK扩展的支持。 我已经可以在运行时重新定义或添加新的密码实现,但我不确定JCA是否提供足够的粒度来在TLS中添加新的密码套件。