cjavarsa加密解密
A. java RSA 加密解密中 密鑰保存並讀取,數據加密解密並保存讀取 問題
幫你完善了下代碼。
importjava.io.File;
importjava.io.FileOutputStream;
importjava.io.FileReader;
importjava.io.OutputStream;
importjava.io.PrintWriter;
importjava.io.Reader;
importjava.util.Map;
publicclassTest{
staticStringpublicKey;
staticStringprivateKey;
publicTest()throwsException{
//TODOAuto-generatedconstructorstub
Map<String,Object>keyMap=RSAUtils.genKeyPair();
publicKey=RSAUtils.getPublicKey(keyMap);
privateKey=RSAUtils.getPrivateKey(keyMap);
//保存密鑰,名字分別為publicKey。txt和privateKey。txt;
PrintWriterpw1=newPrintWriter(newFileOutputStream(
"D:/publicKey.txt"));
PrintWriterpw2=newPrintWriter(newFileOutputStream(
"D:/privateKey.txt"));
pw1.print(publicKey);
pw2.print(privateKey);
pw1.close();
pw2.close();
//從保存的目錄讀取剛才的保存的公鑰,
Stringpubkey=readFile("D:/publicKey.txt");//讀取的公鑰內容;
Stringdata=readFile("D:/1.txt");//需要公鑰加密的文件的內容(如D:/1.txt)
byte[]encByPubKeyData=RSAUtils.encryptByPublicKey(data.getBytes(),
pubkey);
//將加密數據base64後寫入文件
writeFile("D:/Encfile.txt",Base64Utils.encode(encByPubKeyData).getBytes("UTF-8"));
//加密後的文件保存在
Stringprikey=readFile("D:/privateKey.txt");//從保存的目錄讀取剛才的保存的私鑰,
StringEncdata=readFile("D:/Encfile.txt");//剛才加密的文件的內容;
byte[]encData=Base64Utils.decode(Encdata);
byte[]decByPriKeyData=RSAUtils.decryptByPrivateKey(encData,prikey);
//解密後後的文件保存在D:/Decfile.txt
writeFile("D:/Decfile.txt",decByPriKeyData);
}
privatestaticStringreadFile(StringfilePath)throwsException{
FileinFile=newFile(filePath);
longfileLen=inFile.length();
Readerreader=newFileReader(inFile);
char[]content=newchar[(int)fileLen];
reader.read(content);
System.out.println("讀取到的內容為:"+newString(content));
returnnewString(content);
}
privatestaticvoidwriteFile(StringfilePath,byte[]content)
throwsException{
System.out.println("待寫入文件的內容為:"+newString(content));
FileoutFile=newFile(filePath);
OutputStreamout=newFileOutputStream(outFile);
out.write(content);
if(out!=null)out.close();
}
publicstaticvoidmain(String[]args)throwsException{
//TODOAuto-generatedmethodstub
newTest();
}
}
測試結果:
讀取到的內容為:++lXfZxzNpeA+rHaxmeQ2qI+5ES9AF7G6KIwjzakKsA08Ly+1y3dp0BnoyHF7/Pj3AS28fDmE5piea7w36vp4E3Ts+F9vwIDAQAB
讀取到的內容為:鍩縣ahaha
B. Java生成的RSA密鑰對,用C#加密解密,怎麼弄
本身就是WebService,問題是伺服器是Java寫的,現在客戶端要用C#寫,這兩個算是跨平台了伺服器的(Java)傳過來的密鑰對(公鑰/私鑰)在C#這邊是加密解密不了。這才是關鍵問題所在
C. java RSA 加解密
import java security Key;
import java security KeyFactory;
import java security KeyPair;
import java security KeyPairGenerator;
import java security PrivateKey;
import java security PublicKey;
import java security interfaces RSAPrivateKey;
import java security interfaces RSAPublicKey;
import java security spec PKCS EncodedKeySpec;
import java security spec X EncodedKeySpec;
import javax crypto Cipher;
import sun misc BASE Decoder;
import sun misc BASE Encoder;
public class RSACoder {
/**
* 得到公鑰
* @param key 密鑰字元串(經過base 編碼)
* @throws Exception
*/
public static PublicKey getPublicKey(String key) throws Exception {
byte[] keyBytes;
keyBytes = (new BASE Decoder()) decodeBuffer(key);
X EncodedKeySpec keySpec = new X EncodedKeySpec(keyBytes);
KeyFactory keyFactory = KeyFactory getInstance( RSA );
PublicKey publicKey = keyFactory generatePublic(keySpec);
return publicKey;
}
/**
* 得到私鑰
* @param key 密鑰字元串(經過base 編碼)
* @throws Exception
*/
public static PrivateKey getPrivateKey(String key) throws Exception {
byte[] keyBytes;
keyBytes = (new BASE Decoder()) decodeBuffer(key);
PKCS EncodedKeySpec keySpec = new PKCS EncodedKeySpec(keyBytes);
KeyFactory keyFactory = KeyFactory getInstance( RSA );
PrivateKey privateKey = keyFactory generatePrivate(keySpec);
return privateKey;
}
/**
* 得到密鑰字元串(經過base 編碼)
* @return
*/
public static String getKeyString(Key key) throws Exception {
byte[] keyBytes = key getEncoded();
String s = (new BASE Encoder()) encode(keyBytes);
return s;
}
public static void main(String[] args) throws Exception {
KeyPairGenerator keyPairGen = KeyPairGenerator getInstance( RSA );
//密鑰位數
keyPairGen initialize( );
//密鑰對
KeyPair keyPair = keyPairGen generateKeyPair();
// 公鑰
PublicKey publicKey = (RSAPublicKey) keyPair getPublic();
// 私鑰
PrivateKey privateKey = (RSAPrivateKey) keyPair getPrivate();
String publicKeyString = getKeyString(publicKey);
System out println( public: + publicKeyString);
String privateKeyString = getKeyString(privateKey);
System out println( private: + privateKeyString);
//加解密類
Cipher cipher = Cipher getInstance( RSA );//Cipher getInstance( RSA/ECB/PKCS Padding );
//明文
byte[] plainText = 我們都很好!郵件 getBytes();
//加密
cipher init(Cipher ENCRYPT_MODE publicKey);
byte[] enBytes = cipher doFinal(plainText);
//通過密鑰字元串得到密鑰
publicKey = getPublicKey(publicKeyString);
privateKey = getPrivateKey(privateKeyString);
//解密
cipher init(Cipher DECRYPT_MODE privateKey);
byte[]deBytes = cipher doFinal(enBytes);
publicKeyString = getKeyString(publicKey);
System out println( public: +publicKeyString);
privateKeyString = getKeyString(privateKey);
System out println( private: + privateKeyString);
String s = new String(deBytes);
System out println(s);
}
lishixin/Article/program/Java/hx/201311/25516
D. RSA c#加密 java端解密 解密出來的總是亂碼
RSA 加密的話,一共有幾個參數,你需要看看你的填充(padding)是不是配置成一樣的,另外就是你的塊長度是不是兩邊一樣了。一般來說解密不對都是因為這些配置沒有對。
E. java生成rsa密鑰,c++可以直接使用密鑰解密嗎
可以的,RSA加密解密有一套規則的,不同的語言都會遵循,只是實現的方式不一樣。
用對應的的公鑰就可以進行解密
F. javarsa加密c#解密失敗
系統bug。當軟體javarsa的系統出現系統bug時,就會導致該軟體在解密c井的程序的時候出現解密失敗的情況,只需要將該軟體卸載後重新安裝該軟體即可。
G. 如何實現用javascript實現rsa加解密
用javascript實現rsa加解密的實現方式是通過PKCS完成的。
1、整個定義的function
function pkcs1pad2(s,n) {
if(n < s.length + 11) { // TODO: fix for utf-8
alert("Message too long for RSA");
return null;
}
var ba = new Array();
var i = s.length - 1;
while(i >= 0 && n > 0) {
var c = s.charCodeAt(i--);
//UTF-8編碼為變長位元組,使用實際的位元組來記錄
if(c < 128) { // encode using utf-8
ba[--n] = c;
}
else if((c > 127) && (c < 2048)) {
ba[--n] = (c & 63) | 128;
ba[--n] = (c >> 6) | 192;
}
else {
ba[--n] = (c & 63) | 128;
ba[--n] = ((c >> 6) & 63) | 128;
ba[--n] = (c >> 12) | 224;
}
}
//實際輸入拼裝結束,將下一位賦值為0標記結束
ba[--n] = 0;
var rng = new SecureRandom();
var x = new Array();
//拼接隨機非0位元組
while(n > 2) { // random non-zero pad
x[0] = 0;
while(x[0] == 0) rng.nextBytes(x);
ba[--n] = x[0];
}
//這兩位做簡單的校驗
ba[--n] = 2;
ba[--n] = 0;
return new BigInteger(ba);
}
該方法中對UTF-8字元進行了兼容,並且在拼裝完實際輸入的字元後,還拼裝了隨機的位元組,使用拼裝後的字元串去加密。由於每次拼裝的結果是隨機的,這樣每次加密後的密文都不同。
2、調用方法:;
function RSAEncrypt(text) {
var m = pkcs1pad2(text,(this.n.bitLength()+7)>>3);
if(m == null) return null;
var c = this.doPublic(m);
if(c == null) return null;
var h = c.toString(16);
if((h.length & 1) == 0) return h; else return "0" + h;
}
H. 用JAVA實現RSA演算法的加密解密 跪求
#####################################
我已經說的很清楚了。。。只要把我說的用程序寫下來,加個菜單就行了。。。要是這樣都不會的話。。。那就當我沒說了。。。
####################################
RSA。。。難道你自己建立PKI,否則沒法弄。。。
你說這個題。。直接手算的了。。。又不是大數
N = P * Q = 1739
N的歐拉函數
F(N) = ( p - 1 ) * ( Q - 1 ) = 1656
然後算模擬嘛。。。5 模 1656的逆。。。
1656 = 1 + 1655 = 1 + 5 * 331
所以5模1656的逆就是-331 = 1656 - 331 = 1325
所以D = 1325啦
你要加密你至少告訴我明文是什麼吧。。。。
如果加密明文M的話,密文C = M 模 1739的E次冪
解密是M = C 模1739的D次冪
小數直接手算啦~費馬小定理,從左向右計算,可以簡化一部分計算,不過你這個題已經差不多最簡化了。。。。你這個題實際上就是用來手算的。真正RSA一般人根本做不出來,光是素性檢驗就很麻煩了。。而且就算你能實現,你有PKI嗎???沒有PKI。。。RSA的安全從何而來???
我們也上學期剛學的密碼。。。呵呵~~~有問題繼續問。。。現在無聊啊。。
I. 在JAVA使用RSA加密的密串和簽名如何在C#里解密和驗簽
你好,你需要知道RSA的秘鑰和簽名的演算法。
首先你需要有RSA的私鑰,利用私鑰將encrypt的部分進行解密。然後利用簽名的演算法對解密的結果做一次簽名的運算,如何結果和發送過來的sign一樣的話,簽名就是沒有問題的。
C#有RSA和簽名演算法的庫,所以你重要的是有秘鑰和知道簽名的演算法。