我正在设法获得一些行之有效的 Java代码,用于对Payster纽州进行加密。 这并非易事! 甚至在我收到一些法典时,从Palster那里,我会遇到一些错误。
因此,我认为,迄今为止,我将最终工作。
我从Papals网站下载了Java.zip文档。 内部有两门课程:客户版。 java
www.un.org/Depts/DGACM/index_spanish.htm 问题—— 页: 1 InvalidKeyException : 非法关键尺寸代码>错误。
Questionswww.un.org/Depts/DGACM/index_spanish.htm 1) How do I resolve this issue? 2) What line of code is throwing the error?
C:jakarta-tomcatwebappsPlanBWEB-INFclasses>java palmb.servlets.paypal.ButtonEncryption
java.io.IOException: exception decrypting data - java.security.InvalidKeyException: Illegal key size
at org.bouncycastle.jce.provider.JDKPKCS12KeyStore.cryptData(Unknown Source)
at org.bouncycastle.jce.provider.JDKPKCS12KeyStore.engineLoad(Unknown Source)
at java.security.KeyStore.load(Unknown Source)
at palmb.servlets.paypal.ClientSide.getButtonEncryptionValue(ClientSide.java:63)
at palmb.servlets.paypal.ButtonEncryption.main(ButtonEncryption.java:81)
www.un.org/Depts/DGACM/index_spanish.htm
ClientSide class
package palmb.servlets.paypal;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.security.InvalidAlgorithmParameterException;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import java.security.PrivateKey;
import java.security.UnrecoverableKeyException;
import java.security.cert.CertStore;
import java.security.cert.CertStoreException;
import java.security.cert.CertificateException;
import java.security.cert.CertificateFactory;
import java.security.cert.CollectionCertStoreParameters;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.Enumeration;
import org.bouncycastle.cms.CMSEnvelopedData;
import org.bouncycastle.cms.CMSEnvelopedDataGenerator;
import org.bouncycastle.cms.CMSException;
import org.bouncycastle.cms.CMSProcessableByteArray;
import org.bouncycastle.cms.CMSSignedData;
import org.bouncycastle.cms.CMSSignedDataGenerator;
import org.bouncycastle.openssl.PEMReader;
import org.bouncycastle.util.encoders.Base64;
/**
*/
public class ClientSide
{
private String keyPath;
private String certPath;
private String paypalCertPath;
private String keyPass;
public ClientSide( String keyPath, String certPath, String paypalCertPath, String keyPass )
{
this.keyPath = keyPath;
this.certPath = certPath;
this.paypalCertPath = paypalCertPath;
this.keyPass = keyPass;
}
public String getButtonEncryptionValue(String _data, String _privateKeyPath, String _certPath, String _payPalCertPath,
String _keyPass) throws IOException,CertificateException,KeyStoreException,
UnrecoverableKeyException,InvalidAlgorithmParameterException,NoSuchAlgorithmException,
NoSuchProviderException,CertStoreException,CMSException {
_data = _data.replace( , ,
);
CertificateFactory cf = CertificateFactory.getInstance("X509", "BC");
// Read the Private Key
KeyStore ks = KeyStore.getInstance("PKCS12", "BC");
ks.load( new FileInputStream(_privateKeyPath), _keyPass.toCharArray() );
String keyAlias = null;
Enumeration aliases = ks.aliases();
while (aliases.hasMoreElements()) {
keyAlias = (String) aliases.nextElement();
}
PrivateKey privateKey = (PrivateKey) ks.getKey( keyAlias, _keyPass.toCharArray() );
// Read the Certificate
X509Certificate certificate = (X509Certificate) cf.generateCertificate( new FileInputStream(_certPath) );
// Read the PayPal Cert
X509Certificate payPalCert = (X509Certificate) cf.generateCertificate( new FileInputStream(_payPalCertPath) );
// Create the Data
byte[] data = _data.getBytes();
// Sign the Data with my signing only key pair
CMSSignedDataGenerator signedGenerator = new CMSSignedDataGenerator();
signedGenerator.addSigner( privateKey, certificate, CMSSignedDataGenerator.DIGEST_SHA1 );
ArrayList certList = new ArrayList();
certList.add(certificate);
CertStore certStore = CertStore.getInstance( "Collection", new CollectionCertStoreParameters(certList) );
signedGenerator.addCertificatesAndCRLs(certStore);
CMSProcessableByteArray cmsByteArray = new CMSProcessableByteArray(data);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
cmsByteArray.write(baos);
System.out.println( "CMSProcessableByteArray contains [" + baos.toString() + "]" );
CMSSignedData signedData = signedGenerator.generate(cmsByteArray, true, "BC");
byte[] signed = signedData.getEncoded();
CMSEnvelopedDataGenerator envGenerator = new CMSEnvelopedDataGenerator();
envGenerator.addKeyTransRecipient(payPalCert);
CMSEnvelopedData envData = envGenerator.generate( new CMSProcessableByteArray(signed),
CMSEnvelopedDataGenerator.DES_EDE3_CBC, "BC" );
byte[] pkcs7Bytes = envData.getEncoded();
return new String( DERtoPEM(pkcs7Bytes, "PKCS7") );
}
public static byte[] DERtoPEM(byte[] bytes, String headfoot)
{
ByteArrayOutputStream pemStream = new ByteArrayOutputStream();
PrintWriter writer = new PrintWriter(pemStream);
byte[] stringBytes = Base64.encode(bytes);
System.out.println("Converting " + stringBytes.length + " bytes");
String encoded = new String(stringBytes);
if (headfoot != null) {
writer.print("-----BEGIN " + headfoot + "-----
");
}
// write 64 chars per line till done
int i = 0;
while ((i + 1) * 64 < encoded.length()) {
writer.print(encoded.substring(i * 64, (i + 1) * 64));
writer.print("
");
i++;
}
if (encoded.length() % 64 != 0) {
writer.print(encoded.substring(i * 64)); // write remainder
writer.print("
");
}
if (headfoot != null) {
writer.print("-----END " + headfoot + "-----
");
}
writer.flush();
return pemStream.toByteArray();
}
}
www.un.org/Depts/DGACM/index_spanish.htm
ButtonEncryption class
package palmb.servlets.paypal;
//import com.paypal.crypto.sample.*;
import palmb.servlets.paypal.ClientSide;
import java.io.*;
import java.security.InvalidAlgorithmParameterException;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import java.security.Security;
import java.security.UnrecoverableKeyException;
import java.security.cert.CertStoreException;
import java.security.cert.CertificateException;
import org.bouncycastle.cms.CMSException;
/**
*/
public class ButtonEncryption {
//path to public cert
private static String certPath = "C:/jakarta-tomcat/webapps/PlanB/Certs/public-cert.pem";
//path to private key in PKCS12 format
private static String keyPath = "C:/jakarta-tomcat/webapps/PlanB/Certs/my_pkcs12.p12";
//path to Paypal s public cert
private static String paypalCertPath = "C:/jakarta-tomcat/webapps/PlanB/Certs/paypal_cert_pem.txt";
//private key password
private static String keyPass = "password"; //will be replaced with actual password when compiled and executed
//the button command, properties/parameters
private static String cmdText = "cmd=_xclick
business=buyer@hotmail.com
item_name=vase
itemprice=25.00"; //cmd=_xclick,business=sample@paypal.com,amount=1.00,currency_code=USD
//output file for form code
private static String output = "test.html";
public static void main(String[] args)
{
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
String stage = "sandbox";
try
{
ClientSide client_side = new ClientSide( keyPath, certPath, paypalCertPath, keyPass );
String result = client_side.getButtonEncryptionValue( cmdText, keyPath, certPath, paypalCertPath, keyPass );
File outputFile = new File( output );
if ( outputFile.exists() )
outputFile.delete();
if ( result != null && result != "")
{
try {
OutputStream fout= new FileOutputStream( output );
OutputStream bout= new BufferedOutputStream(fout);
OutputStreamWriter out = new OutputStreamWriter(bout, "US-ASCII");
out.write( "<form action="https://www." );
out.write( stage );
out.write( "paypal.com/cgi-bin/webscr" method="post">" );
out.write( "<input type="hidden" name="cmd" value="_s-xclick">" ); ;
out.write( "<input type="image" src="https://www." );
out.write( stage );
out.write( "paypal.com/en_US/i/btn/x-click-but23.gif" border="0" name="submit" " );
out.write( "alt="Make payments with PayPal - it s fast, free and secure!">" );
out.write( "<input type="hidden" name="encrypted" value="" );
out.write( result );
out.write( "">" );
out.write( "</form>");
out.flush(); // Don t forget to flush!
out.close();
}
catch (UnsupportedEncodingException e) {
System.out.println(
"This VM does not support the ASCII character set."
);
}
catch (IOException e) {
System.out.println(e.getMessage());
}
}
}
catch (NoSuchAlgorithmException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (NoSuchProviderException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (CMSException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (CertificateException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (KeyStoreException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (UnrecoverableKeyException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (InvalidAlgorithmParameterException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (CertStoreException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
www.un.org/Depts/DGACM/index_spanish.htm
Edited : info about keys/certificates
I generated the Private Key and Public Certificate with OpenSSL via the following commands. www.un.org/Depts/DGACM/index_spanish.htm Private Keywww.un.org/Depts/DGACM/index_spanish.htm openssl genrsa -out private-key.pem 1024 www.un.org/Depts/DGACM/index_spanish.htm Public Certificate www.un.org/Depts/DGACM/index_spanish.htmopenssl req -new -key private-key.pem -x509 -days 1095 -out public-cert.pem www.un.org/Depts/DGACM/index_spanish.htm Created PKCS12 Filewww.un.org/Depts/DGACM/index_spanish.htm openssl pkcs12 -export -in public-cert.pem -inkey private-key.pem -out my_pkcs12.p12
www.un.org/Depts/DGACM/index_spanish.htm Additionally, I had to download the Paypal Public Certificate from the Paypal website.
www.un.org/Depts/DGACM/index_spanish.htm
Edited - adding compilation warnings - BouncyCastle
C:jakarta-tomcatwebappsPlanBWEB-INFclasses>javac .palmbservletspaypalClientSide.java -Xlint
.palmbservletspaypalClientSide.java:85: warning: [deprecation] addSigner(java.security.PrivateKey,java.security.cert.X509Certificate,java.lang.String) in org.bouncycastle.cms.CMSSignedDataGenerator has been deprecated
signedGenerator.addSigner( privateKey, certificate, CMSSignedDat
aGenerator.DIGEST_SHA1 );
^
.palmbservletspaypalClientSide.java:88: warning: [unchecked] unchecked call
to add(E) as a member of the raw type java.util.ArrayList
certList.add(certificate);
^
.palmbservletspaypalClientSide.java:90: warning: [deprecation] addCertificatesAndCRLs(java.security.cert.CertStore) in org.bouncycastle.cms.CMSSignedGenerat
or has been deprecated
signedGenerator.addCertificatesAndCRLs(certStore);
^
.palmbservletspaypalClientSide.java:97: warning: [deprecation] generate(org.
bouncycastle.cms.CMSProcessable,boolean,java.lang.String) in org.bouncycastle.cm
s.CMSSignedDataGenerator has been deprecated
CMSSignedData signedData = signedGenerator.generate(cmsByteArray, true, "BC");
^
.palmbservletspaypalClientSide.java:102: warning: [deprecation] addKeyTransR
ecipient(java.security.cert.X509Certificate) in org.bouncycastle.cms.CMSEnvelope
dGenerator has been deprecated
envGenerator.addKeyTransRecipient(payPalCert);
^
.palmbservletspaypalClientSide.java:103: warning: [deprecation] generate(org.bouncycastle.cms.CMSProcessable,java.lang.String,java.lang.String) in org.bouncycastle.cms.CMSEnvelopedDataGenerator has been deprecated
CMSEnvelopedData envData = envGenerator.generate( new CMSProcess
ableByteArray(signed),
^
6 warnings
www.un.org/Depts/DGACM/index_spanish.htm
JCE policy file installation steps
These are the steps I took to installing the JCE Unlimited Strength Policy files:www.un.org/Depts/DGACM/index_spanish.htm 1) Went to Java JCE Download Page on Oracle.www.un.org/Depts/DGACM/index_spanish.htm 2) Extracted files from zip.www.un.org/Depts/DGACM/index_spanish.htm 3) Placed local_policy.jar and US_export_policy.jar files in C:Javajdk1.6.0_22jrelibsecurity folder. www.un.org/Depts/DGACM/index_spanish.htm Note: C:Javajdk1.6.0_22 is set as %JAVA_HOME% www.un.org/Depts/DGACM/index_spanish.htm 4) Updated system classpath to include location of jars. www.un.org/Depts/DGACM/index_spanish.htm Note: There are other files, that came with the JDK 1.6 within the security folder, including : java.policy, java.security, javaws.policy, trusted.libraries - but those probably have nothing to do with the JCE files, right? www.un.org/Depts/DGACM/index_spanish.htm
Edit 6/23/2011 - results after further configuration
I went to Bouncy Castle page at http://www.bouncycastle.org/specifications.html#installwww.un.org/Depts/DGACM/index_spanish.htm
Scroll down to 5.0 Bouncy Castle Provider then read info under 5.1 Example. It makes mention of adding a parameter for the Bouncy Castle Provider to the java.security
file. My file is under C:Javajdk1.6.0_22jrelibsecurity.www.un.org/Depts/DGACM/index_spanish.htmwww.un.org/Depts/DGACM/index_spanish.htm
I added the following line to my file - security.provider.10=org.bouncycastle.jce.provider.BouncyCastleProvider
www.un.org/Depts/DGACM/index_spanish.htm
In addition, I discovered that I hadn t added the Bouncy Castle jars to the classpath, so I went ahead and did so. www.un.org/Depts/DGACM/index_spanish.htm
Now after making these changes, recompiling and attempting to execute ClientSide.java
I m given the same exception : but maybe the focus should be on the part of the exception where it says this about bouncycastle provider -
at org.bouncycastle.jce.provider.JDKPKCS12KeyStore.cryptData(Unknown Source)
at org.bouncycastle.jce.provider.JDKPKCS12KeyStore.engineLoad(Unknown Source)
<>0> PeteyB——我确信,我正确地安装了政策档案。 根据我在这里所说的话,你能否建议我尝试什么? http://www.bouncy城堡.org/specifications.html#install”rel=“noreferer” http://www.bouncy城堡.org/specifications.html#install。 并且看是否有一米失踪?