这个问题很棘手,但我需要任何帮助。
我在我的端使用system.security.cryptography.XML加密XML SAML Blob。
加密工作正常,但是当它击中另一端的java库时,它们会得到错误:
java.lang.ArrayIndexOutOfBoundsException: too much data for RSA block
at org.bouncycastle.jce.provider.JCERSACipher.engineDoFinal(Unknown Source)
at org.bouncycastle.jce.provider.WrapCipherSpi.engineUnwrap(Unknown Source)
at javax.crypto.Cipher.unwrap(Unknown Source)
at org.apache.xml.security.encryption.XMLCipher.decryptKey(Unknown Source)
at org.opensaml.xml.encryption.Decrypter.decryptKey(Decrypter.java:680)
at org.opensaml.xml.encryption.Decrypter.decryptKey(Decrypter.java:611)
at org.opensaml.xml.encryption.Decrypter.decryptUsingResolvedEncryptedKey(Decrypter.java:761)
at org.opensaml.xml.encryption.Decrypter.decryptDataToDOM(Decrypter.java:512)
at org.opensaml.xml.encryption.Decrypter.decryptDataToList(Decrypter.java:439)
at org.opensaml.xml.encryption.Decrypter.decryptData(Decrypter.java:400)
at org.opensaml.saml2.encryption.Decrypter.decryptData(Decrypter.java:141)
at org.opensaml.saml2.encryption.Decrypter.decrypt(Decrypter.java:69)
public XmlElement EncryptXml(XmlElement assertion, X509Certificate2 cert)
{
//cert = new X509Certificate2(@"C:\temp\SEI.cer");
XmlElement returnElement;
EncryptedData message = new EncryptedData();
message.Type = "http://www.w3.org/2001/04/xmlenc#Element";
message.EncryptionMethod = new EncryptionMethod(EncryptedXml.XmlEncAES128KeyWrapUrl);
//message.EncryptionMethod = new EncryptionMethod(EncryptedXml.XmlEncAES128KeyWrapUrl);
EncryptedKey key = new EncryptedKey();
key.EncryptionMethod = new EncryptionMethod(EncryptedXml.XmlEncRSA15Url);
key.KeyInfo.AddClause(new KeyInfoX509Data(cert));
var rKey = new RijndaelManaged();
rKey.BlockSize = 128;
rKey.KeySize = 128;
rKey.Padding = PaddingMode.PKCS7;
rKey.Mode = CipherMode.CBC;
key.CipherData.CipherValue = EncryptedXml.EncryptKey(rKey.Key, (RSA)cert.PublicKey.Key, false);
KeyInfoEncryptedKey keyInfo = new KeyInfoEncryptedKey(key);
message.KeyInfo.AddClause(keyInfo);
message.CipherData.CipherValue = new EncryptedXml().EncryptData(assertion, rKey, false);
returnElement = message.GetXml();
Logger("Cert Size: " + System.Text.ASCIIEncoding.Unicode.GetByteCount(cert.ToString()));
GetBytesKeyAndData(rKey, assertion.InnerText);
return returnElement;
}
我为RSA密钥的AES加密更改了keywrapurl的大小。
我仍然不太理解opensaml java库的加密是如何工作的,在破解它之后,我对用java设置一个简单的测试环境所需要的时间感到惊讶。
这个故事的寓意是:不要对大量数据使用非对称加密。
public XmlElement EncryptXml(XmlElement assertion, X509Certificate2 cert)
{
//cert = new X509Certificate2(@"C:\temp\SEI.cer");
XmlElement returnElement;
EncryptedData message = new EncryptedData();
message.Type = "http://www.w3.org/2001/04/xmlenc#Element";
message.EncryptionMethod = new EncryptionMethod(EncryptedXml.XmlEncAES256KeyWrapUrl);
//message.EncryptionMethod = new EncryptionMethod(EncryptedXml.XmlEncAES128KeyWrapUrl);
EncryptedKey key = new EncryptedKey();
key.EncryptionMethod = new EncryptionMethod(EncryptedXml.XmlEncRSA15Url);
key.KeyInfo.AddClause(new KeyInfoX509Data(cert));
var rKey = new RijndaelManaged();
rKey.BlockSize = 128;
rKey.KeySize = 128;
rKey.Padding = PaddingMode.PKCS7;
rKey.Mode = CipherMode.CBC;
key.CipherData.CipherValue = EncryptedXml.EncryptKey(rKey.Key, (RSA)cert.PublicKey.Key, false);
KeyInfoEncryptedKey keyInfo = new KeyInfoEncryptedKey(key);
message.KeyInfo.AddClause(keyInfo);
message.CipherData.CipherValue = new EncryptedXml().EncryptData(assertion, rKey, false);
returnElement = message.GetXml();
Logger("Cert Size: " + System.Text.ASCIIEncoding.Unicode.GetByteCount(cert.ToString()));
GetBytesKeyAndData(rKey, assertion.InnerText);
return returnElement;
}
问题内容: 我正在尝试使用RSA算法在.NET中加密字符串,并在Java中解密结果。目前,我已经可以做相反的事情(用Java加密,用.NET解密)。这里有我的代码可以实际工作(JAVA加密): 和(.NET解密) 现在我想做相反的事情……但是我遇到了一些错误,例如(密钥的大小应该是128个字节……等等)我应该怎么做? 在这里,我添加当前的 无效 代码: 。净 爪哇 问题答案: Java解密代码的最
问题内容: 我正在使用RSA在JAVA上进行加密,并尝试使用.NET进行解密。我包括我的JAVA代码和.NET代码,希望有人对此有所了解。 JAVA代码: 从此JAVA代码中,我得到了加密字符串的结果,该结果恰好是: FOP4 AAIH6hcabXnrvNG5YUk + / + nBv9n9HU0CAgZjkIWQIDjbOpSwoPVBFERrZ6641x2QaoJw5yv18XAay 0WrC
本文向大家介绍.NET MD5加密解密代码解析,包括了.NET MD5加密解密代码解析的使用技巧和注意事项,需要的朋友参考一下 MD5简介: 是让大容量信息在用数字签名软件签署私人密匙前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成一定长的大整数)。不管是MD2、MD4还是MD5,它们都需要获得一个随机长度的信息并产生一个128位的信息摘要。虽然这些算法的结构或多或少有些相似,但
我需要在iPhone或iPad上加密字符串(实际上是XML文件),然后用.NET应用程序解密。感谢David Veksler在这里提出的问题“.NET和iPhone之间的AES互操作性?”,以及在这里发表的博客文章http://automagical.rationalmind.net/2009/02/12/aes-interoperability-between-net-and-iPhone/。
我有一段Java代码,负责加密和解密,需要将其转换为Ruby。在这里发布之前,我通过了4个链接,但没有运气。 aes-cbc-pkcs5padding-encrypt-in-java-decrypt-in-ruby aes-cbc-pkcs5padding-implementation-in-ruby-for-rails 主旨github。通用域名格式 Ruby中的对称加密算法 为了得到相同的结果
我试图用C#加密一些(cookie)数据,然后用PHP解密。我选择使用Rijndael加密。我几乎让它工作,除了只有一部分的文本被解密!我从这个例子开始工作:用C#解密PHP加密的字符串 这是我正在加密的文本(JSON)(删除敏感信息): 所以我登录到 C# 应用程序,该应用程序从存储的密钥和 IV 创建/编码 cookie,然后重定向到应该解密/读取 cookie 的 PHP 应用程序。当我解密