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和签名算法的库,所以你重要的是有秘钥和知道签名的算法。