Tag: rsa

使用OpenSAML在Java中使用SAML 2.0解密加密的断言

尝试使用SAML 2.0解密加密断言时遇到问题。 我使用的库是OpenSAML Java库2.5.2。 加密的断言如下所示: 1H3mV/pJAlVZAst/Dt0rqbBd67g= … ENCRYPTED KEY HERE … … ENCRYPTED ASSERTIONS HERE … 我确实使用以下openssl命令将PEM格式的私钥转换为pkcs8格式: openssl pkcs8 -topk8 -nocrypt -inform PEM -in rsa_private_key.key -outform DER -out rsa_private_key.pk8 然后我准备尝试解密加密的断言。 这是我的Java代码: … // Load the XML file and parse it. File xmlFile = new File(“data\\token.xml”); InputStream inputStream = new FileInputStream(xmlFile); Document document = parserPoolManager.parse(inputStream); Element […]

数字签名SunMSCAPI提供商和MS Crypto API

我想与SunMSCAPI提供商签署文件。 由于需要使用MS Crypto API导入公钥和签名。 通常使用SHA1withRSA生成签名,最终使用big-endian到little-endian(字节顺序)转换。 //generate keystore with java keytool $Keytool -genkey -alias tsign -keystore c:\test\tsignjks.p12 – keyalg rsa -storetype pkcs12 在Java应用程序中: //for signing and getting keystore, assuming windows certificate is installed ..ks = KeyStore.getInstance(“Windows-MY”,”SunMSCAPI”); PrivateKey priv = ks.getKey(“tsign”,password); Signature rsa = Signature.getInstance(“SHA1withRSA”,”SunMSCAPI”); rsa.initSign(priv); .. rsa.update(buffer, 0, len); .. byte[] realSig = rsa.sign(); //for writing […]

“javax.crypto.BadPaddingException:数据必须从零开始”exception

我在解密字符串时遇到了上述exception。 以下是我的代码: import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.NoSuchAlgorithmException; import javax.crypto.Cipher; public class EncryptAndDecrypt { public static Cipher createCipher () throws Exception{ Cipher cipher = Cipher.getInstance(“RSA/ECB/PKCS1Padding”); return cipher; } public static KeyPair generateKey () throws NoSuchAlgorithmException{ KeyPairGenerator keyGen = KeyPairGenerator.getInstance (“RSA”); keyGen.initialize(1024); KeyPair key = keyGen.generateKeyPair(); return key; } public static byte [] encrypt (String str, […]

生成RSA密钥对并将private编码为字符串

我想生成512位RSA密钥对,然后将我的公钥编码为字符串。 我怎样才能做到这一点?

RSA:在iOS中加密,在Java中解密

我有一个从Java服务器发送的公钥。 在解码和去除ASN.1标头之前,base64编码的字符串匹配。 我使用SecItemAdd将公钥存储在钥匙串中。 所以我正在尝试使用公钥加密数据,并使用Java中的私钥对其进行解密。 我在iOS端使用SecKeyEncrypt ,在Java端使用Cipher 。 我正在加密的是加密我的实际数据的对称AES密钥,因此密钥长度为16个字节。 当简单地对base64进行编码时,一切正常,所以我知道这个RSA加密有问题。 这是我的iOS调用示例: OSStatus sanityCheck = SecKeyEncrypt(publicKey, kSecPaddingPKCS1, (const uint8_t *) [incomingData bytes], keyBufferSize, cipherBuffer, &cipherBufferSize ); 这是我的Java调用的一个例子: public static byte[] decryptMessage (byte[] message, PrivateKey privateKey, String algorithm) { if (message == null || privateKey == null) { return null; } Cipher cipher = createCipher(Cipher.DECRYPT_MODE, privateKey, algorithm, false); […]

Java – 使用现有公钥文件加密字符串

我在过去的4-5个小时里一直在研究这个问题,尽管找到的答案使用了从几种方法到整个~100系列的所有内容,但似乎无法找到真正有效的答案。 我无法想象没有一些简单的function可以做这么微不足道的事情:P 我有一套预先存在的公钥/私钥(实际上是两套 – 一个是由ssh-keygen生成的,另一个是由openssl生成的……所以无论什么格式都很酷)。 我所追求的只是一个简单的java,相当于我在python中写的东西 – key_object = someModule.KeyObject(nameOfPublicKeyFile) def encrypt (SomePlainText) : return someOtherModule.encrypt(key_object, SomePlainText) 任何帮助都是极好的!

SHA256withRSA和SHA256之间的区别然后是RSA

使用以下两种方法计算签名有什么区别? 使用Signature.getInstance(“SHA256withRSA”)计算签名 使用MessageDigest.getInstance(“SHA-256”)计算SHA256并使用Signature.getInstance(“RSA”);计算摘要Signature.getInstance(“RSA”); 获得签名? 如果它们不同,有没有办法修改方法2,以便两种方法都给出相同的输出? 我尝试了以下代码: package mysha.mysha; import java.security.MessageDigest; import java.security.PrivateKey; import java.security.Security; import java.security.Signature; import org.bouncycastle.jce.provider.BouncyCastleProvider; public class MySHA256 { public static void main(String[] args) throws Exception { //compute SHA256 first Security.addProvider(new BouncyCastleProvider()); String s = “1234”; MessageDigest messageDigest = MessageDigest.getInstance(“SHA-256”); messageDigest.update(s.getBytes()); byte[] outputDigest = messageDigest.digest(); //sign SHA256 with RSA PrivateKey privateKey = […]

在尝试通过KeyPairGenerator加载RSA私钥时,JSch获得“无效私钥:”

我正在使用java.security.KeyPairGenerator来生成RSA密钥对,然后尝试通过Jsch(0.1.49)中提供的KeyPair类加载私钥。 代码: public static void main(String[] args) { String header = “—–BEGIN RSA PRIVATE KEY—–“; String footer = “—–END RSA PRIVATE KEY—–“; KeyPairGenerator keyPairGenerator; try { keyPairGenerator = KeyPairGenerator.getInstance(“RSA”); keyPairGenerator.initialize(2048, new SecureRandom()); PrivateKey privateKey = keyPairGenerator.genKeyPair().getPrivate(); String key = new String(Base64.encodeBase64(privateKey.getEncoded())); StringBuffer pem = new StringBuffer(header+”\n”); int len=key.length(); for( int idx=0 ; idx < len […]

Java / JCE:解密用RSA加密的“长”消息

我有一个包含在byte []中的消息,用“RSA / ECB / PKCS1Padding”加密。 为了解密它,我创建了一个Cipher c并用它启动它 c = Cipher.getInstance(“RSA/ECB/PKCS1Padding”); 直到现在我只使用doFinal()方法解密小消息,返回带有解密字节的byte []。 c.init(Cipher.DECRYPT_MODE, privateKey); byte[] decryptetBytes = c.doFinal(encryptedBytes); 但在这种情况下,数据更大(约500字节), doFinal()方法抛出exception(javax.crypto.IllegalBlockSizeException:数据不得超过128字节)。 我想我需要使用update() – 方法,但我无法弄清楚如何让它正常工作。 这是怎么做到的?

将C#RSACryptoServiceProvider转换为JAVA代码

我得到了由Web服务团队编写的这个C#代码,它公开了我计划使用的一些Web服务。 我的密码需要使用此代码加密,以便Web服务知道如何在其末端解密它。 using(RSACryptoServiceProvider rsa = new RSACryptoServiceProvider()) { rsa.FromXmlString(publicKey); byte[] plainBytes = Encoding.Unicode.GetBytes(clearText); byte[] encryptedBytes = rsa.Encrypt(plainBytes, false); return Convert.ToBase64String(encryptedBytes); } 我正在使用Java来使用这个Web服务,而且现在,我在将#C代码转换为Java代码时遇到了问题,因为该Web服务无法正确解密我的密码。 这是我目前失败的尝试: – // my clear text password String clearTextPassword = “XXXXX”; // these values are provided by the web service team String modulusString = “…”; String publicExponentString = “…”; BigInteger modulus = new […]