Solved

Generating RSA keys and doing RSA encryption (use Java Cryptix provider)

Posted on 2000-03-25
8
477 Views
Last Modified: 2008-03-10
Hi friends,

I would like to generate pair of keys using the RSA algorithm in cryptix toolkit. However got a prob, Could you pls give some advices? Thank you very much.

Below is the code I used to generate the key pair:

import java.security.*;
import cryptix.provider.*;
import cryptix.provider.rsa.*;
import java.io.*;

class GenKey {

public static void main(String[] args)
{
  KeyPairGenerator keys = null;
  try{
keys = KeyPairGenerator.getInstance("RSA");
}
catch(NoSuchAlgorithmException e){
            System.err.println(e);
}

((BaseRSAKeyPairGenerator)keys).initialize(1024,new SecureRandom());

KeyPair pair = keys.generateKeyPair();
      
System.out.println(pair.getPublic().toString());
System.out.println(pair.getPrivate().toString());
      
}
}      

Output:
<--------RSAPublicKey:
n:Multi-Precision Integer 1024 bits long...
sign:Positive
magnitude:Hexadecimal dump of 128
bytes....
0 : 9d.....
32: 0D.....
64: AD....
96: 94...
e:Multi-Precision
sign:Positive
Magnitude:010001
--->
<BaseRSAPrivateKey>


From the output, it seem that NO private key is generated, only the public key is generated. Does I done anything wrong? Or the cryptix library cannot generate the private key?

As I need both the keys to do encryption and decryption, could you pls give some advice on using RSA encryption using Cryptix, since Java JCE is not exportable and the exportable JCE do not have the RSA algorithm?

Thank you very much...

regards HuangJo
0
Comment
Question by:HuangJo
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 4
  • 2
  • 2
8 Comments
 
LVL 2

Expert Comment

by:hpchong7
ID: 2657545
Dear HuangJo,

 I can email JCE to you if you need.



0
 
LVL 2

Expert Comment

by:hpchong7
ID: 2657547
Dear HuangJo,

 I can email JCE to you if you need.



0
 
LVL 10

Accepted Solution

by:
kollegov earned 100 total points
ID: 2657832
This only means that
toString() method of private key
supposed not to show key data anyway, but shows a simple string <private key> only, actual key data remains hiddden.

Meanwhile you have your privateKey generated OK and can use it for encryption..


0
VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

 

Author Comment

by:HuangJo
ID: 2659316
Hi kollegov, thank you very much...However if that is the case, how do I check the format of the private key? From what I know, that although the different provider use the same algorithm, they might not use the same key format, am I right? Do you know ways to check the format of the keys?

Hi hpchong7, thanks alot for offering to email the JCE to me. But does the JCE you mentioned contain the RSA implementation? The new international JCE from Sun, do not contain the RSA algorithm. If yes, pls EMail them to me.  Thanks a million. My Email address is:
huangJo@allomail.com

regards HuangJo
0
 
LVL 10

Expert Comment

by:kollegov
ID: 2660719
PrivateKey interface extends Key Interface, you can use some methods from it interface...

public String getAlgorithm()
public String getFormat()
public byte[] getEncoded()

what do you mean under 'check format'???

If you want to look into raw key data , than
you probably would like to use
byte[] bytes=pair.getPrivate().getEncoded();
and than output byte array

You also can try to cast it into
RSAPrivateKey and
RSAPrivateCrtKey iterfaces
(not sure does cryptix use this interface too) and try  methods of this interfaces to get some more data on key parameters..


 




0
 

Author Comment

by:HuangJo
ID: 2663478
Thank you kollegov.

Now I can convert the private key to byte[] by using your method. Apart from checking the format I need to store the keys in .key file and then retrieve it to do encryption and decryption, but it seem that there is no function to covert it from encoded format back to private/public key format. do you know any? I try to write the byte[] to file and then retrieve them thru fileinputstream, but could not convert it back to keys again. could you pls advise?

Could you all pls provide some sample RSA encryption code? I will greatly appreciate it.

thank you very much..

regards HuangJo




 bytes=pair.getPrivate().getEncoded();
0
 
LVL 10

Expert Comment

by:kollegov
ID: 2663797
1.in frameset rename frame from 'main' to 'myMain' (main can be reserved word on some systems)

2. The problem can be in duplicated
</frameset> tag at the end of your frameset html...

Now your frameset will be:

<html>
<head>
<title>Cummins Northwest,inc Information Pages</title>
</head>
<frameset cols="20%,*">
<frame src="nav.html" scrolling="auto" name="nav" frameborder=0>
<frame src="main.html" name="myMain" scrolling="auto" frameborder=0>
</frameset>
</html>

3. Some additional check required in order to avoid errors, so arrange the function..

4. remove </option>'s

And, well, finally your navigation frame html will be:


<html>
<head>
<script>
function doGo(){
 inx=document.gotolocation.dropdown.selectedIndex;
 if(inx>=0){
   top.myMain.location = document.gotolocation.dropdown.options[inx].value+"";
 }
 return false;
}
</script>
</head>
<body>

<FORM name="gotolocation" method="POST">
<SELECT name="dropdown" size=1>
<OPTION VALUE="Acct.html">Accounting
<OPTION VALUE="brocr.html">Brocr's
<OPTION VALUE="ChoR.html">Chart of Requests
<OPTION VALUE="CheckR.html">Check Requests
<OPTION VALUE="Exp.html">Expense Reports
</SELECT>
<INPUT type="button" onClick="return doGo()" value="Go">

</body>
</html>

If this wouldn't work I'll eat my hat :)
0
 
LVL 10

Expert Comment

by:kollegov
ID: 2663961
Oppsss, sorry, I messed windows, and posted other comment here..
Sorry again..

The question is do you need to save bytes? or key in any predefined format?

If not that you can use serialization
features to store/restore objects..
yourObjectOutputStream.writeObject(key)
key=(PrivateKey)yourObjectInputStream.readObject();

Wouldn't it be easier than restoring
key object from bytes????
0

Featured Post

Get 15 Days FREE Full-Featured Trial

Benefit from a mission critical IT monitoring with Monitis Premium or get it FREE for your entry level monitoring needs.
-Over 200,000 users
-More than 300,000 websites monitored
-Used in 197 countries
-Recommended by 98% of users

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

INTRODUCTION Working with files is a moderately common task in Java.  For most projects hard coding the file names, using parameters in configuration files, or using command-line arguments is sufficient.   However, when your application has vi…
By the end of 1980s, object oriented programming using languages like C++, Simula69 and ObjectPascal gained momentum. It looked like programmers finally found the perfect language. C++ successfully combined the object oriented principles of Simula w…
Viewers learn about the scanner class in this video and are introduced to receiving user input for their programs. Additionally, objects, conditional statements, and loops are used to help reinforce the concepts. Introduce Scanner class: Importing…
Viewers will learn about the regular for loop in Java and how to use it. Definition: Break the for loop down into 3 parts: Syntax when using for loops: Example using a for loop:

630 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question