一般加密原理是,由用户共有的公共密钥和传输数据的用户直接有的私有密钥组成。每次加密的时候,都是由一定算法随机生成一对密钥,用密钥加密所需加密的文件,用公钥加密密钥,然后将这些一起传输给目标用户,目标用户将数据处理后,又按照此密钥加密,然后传输回去。
这样的优点别人很难破解,网络上的数据无法定位,而且产生的密钥是随机的。
接下来这个例子就是java核心技术卷2高级特性安全性一章的最后一个例子。
import
java.io.
*
;
import
java.security.
*
;
import
javax.crypto.
*
;
import
javax.crypto.interfaces.
*
;
import
javax.crypto.spec.
*
;
public
class
RSATest
...
{
private
static
final
int
KEYSIZE
=
512
;
/** */
/**
*
@param
args
*/
public
static
void
main(String[] args)
...
{
//
TODO Auto-generated method stub
try
...
{
if
(args[
0
].equals(
"
-genkey
"
))
...
{
KeyPairGenerator keyPair
=
KeyPairGenerator.getInstance(
"
RSA
"
);
SecureRandom random
=
new
SecureRandom();
keyPair.initialize(KEYSIZE, random);
KeyPair keyP
=
keyPair.generateKeyPair();
ObjectOutputStream oos
=
new
ObjectOutputStream(
new
FileOutputStream(args[
1
]));
oos.writeObject(keyP.getPublic());
oos.close();
oos
=
new
ObjectOutputStream(
new
FileOutputStream(args[
2
]));
oos.writeObject(keyP.getPrivate());
oos.close();
}
else
if
(args[
0
].equals(
"
-encrypt
"
))
...
{
KeyGenerator keygen
=
KeyGenerator.getInstance(
"
AES
"
);
SecureRandom random
=
new
SecureRandom();
keygen.init(random);
SecretKey key
=
keygen.generateKey();
ObjectInputStream kin
=
new
ObjectInputStream(
new
FileInputStream(args[
3
]));
Key publicKey
=
(Key)kin.readObject();
kin.close();
Cipher cipher
=
Cipher.getInstance(
"
RSA
"
);
System.out.println(cipher.getAlgorithm());
cipher.init(Cipher.WRAP_MODE,publicKey);
byte
[] wrappedKey
=
cipher.wrap(key);
DataOutputStream out
=
new
DataOutputStream(
new
FileOutputStream(args[
2
]));
out.writeInt(wrappedKey.length);
out.write(wrappedKey);
InputStream in
=
new
FileInputStream(args[
1
]);
cipher
=
Cipher.getInstance(
"
AES
"
);
cipher.init(Cipher.ENCRYPT_MODE, key);
crypt(in,out,cipher);
in.close();
out.close();
}
else
...
{
DataInputStream in
=
new
DataInputStream(
new
FileInputStream(args[
1
]));
int
length
=
in.readInt();
byte
[]wrappedKey
=
new
byte
[length];
in.read(wrappedKey,
0
,length);
ObjectInputStream keyIn
=
new
ObjectInputStream(
new
FileInputStream(args[
3
]));
Key privateKey
=
(Key) keyIn.readObject();
keyIn.close();
Cipher cipher
=
Cipher.getInstance(
"
RSA
"
);
cipher.init(Cipher.UNWRAP_MODE, privateKey);
Key key
=
cipher.unwrap(wrappedKey,
"
AES
"
, Cipher.SECRET_KEY);
OutputStream out
=
new
FileOutputStream(args[
2
]);
cipher
=
Cipher.getInstance(
"
AES
"
);
cipher.init(Cipher.ENCRYPT_MODE, key);
crypt(in,out,cipher);
in.close();
out.close();
}
}
catch
(Exception e)
...
{
e.printStackTrace();
}
}
private
static
void
crypt(InputStream in, OutputStream out, Cipher cipher)
throws
IOException,GeneralSecurityException
...
{
//
TODO Auto-generated method stub
int
blockSize
=
cipher.getBlockSize();
int
outputSize
=
cipher.getOutputSize(blockSize);
byte
[] inBytes
=
new
byte
[blockSize];
byte
[] outputBytes
=
new
byte
[outputSize];
int
inLength
=
0
;
boolean
more
=
true
;
while
(more)
...
{
inLength
=
in.read(inBytes);
if
(inLength
==
blockSize)
...
{
int
outLength
=
cipher.update(inBytes,
0
,blockSize,outputBytes);
out.write(outputBytes,
0
, outLength);
}
else
more
=
false
;
}
if
(inLength
>
0
)
outputBytes
=
cipher.doFinal(inBytes,
0
, inLength);
else
outputBytes
=
cipher.doFinal();
out.write(outputBytes);
}
}
运行的时候,先在eclipse里面运行的参数里加上-genkey public.key private.key
生成两个文件,就是用于加密的公钥和私钥。
然后运行的参数里面加上-encrypt textFile encryptedFile public.key对第二个参数对应的文件加密,第三个参数对应的就是生成的加密过的文件。
最后运行-decrypt encryptedFile decryptedFile private.key对文件进行解密。
分享到:
相关推荐
Java是一种广泛应用于网络编程领域的编程语言,而RSA算法是一种公钥密码体制,在信息安全领域占据重要地位。本文将深入探讨如何使用Java语言实现RSA加密算法的过程,以及Java语言的发展历程和特点。 Java语言...
总的来说,RSA算法在信息安全领域扮演着重要的角色,Java提供了方便的API来支持RSA的加密解密操作。不过,由于非对称加密的效率问题,通常只用于加密小量数据或加密对称密钥,而非直接加密大量数据。
RSA算法是一种非对称加密算法,它在信息安全领域...综上所述,Java实现RSA算法涉及了非对称加密原理、密钥对生成、加密解密操作以及相关的Java安全类库使用。通过阅读提供的文档,你将能够更好地理解和实践这些概念。
RSA算法是一种非对称加密算法,它在信息安全领域有着广泛的应用,比如数据传输中的加密、数字签名等。在Java中实现RSA算法,我们需要了解几个关键概念:公钥、私钥、模数、指数以及Java的Cipher类。 1. **RSA算法...
RSA算法是一种非对称加密算法,它在信息安全领域有着广泛的应用,如数字签名、数据加密等。这个RAR压缩包提供的是一个Java实现的RSA算法示例,名为"rsa.java",适合开发者参考学习。 RSA算法的核心原理是基于两个大...
本篇将深入探讨RSA算法的理论基础及其在C++和Java两种编程语言中的实现。 RSA算法的基本思想是基于两个大素数的乘积。两个大素数只有两个较小的因子1和自身,但找到这两个因子对于大整数来说极其困难。因此,RSA...
RSA算法是一种非对称加密算法,广泛应用于网络安全领域,如数据加密、数字签名等。在Java中实现RSA算法,主要涉及到`java.security`和`javax.crypto`这两个包中的类和接口。下面将详细介绍如何在Java中实现RSA算法,...
RSA算法是一种非对称加密算法,它在信息安全领域有着广泛的应用,特别是在数据传输中的安全保护。这个RAR压缩包包含了一个名为“Rsa.java”的源代码文件,可能是用于演示如何在Java环境中实现RSA算法。另一个文件...
RSA算法是一种非对称加密算法,由Ron Rivest、...在Java环境中,通过JCE库可以方便地实现RSA算法的各种功能,为数据的安全传输提供了可靠保障。尽管存在潜在的数学挑战,但目前RSA算法仍然是广泛应用的加密手段之一。
在Java平台上实现RSA算法,你需要了解以下关键概念和步骤: 1. **密钥生成**:RSA算法需要用到一对公钥和私钥。公钥可以公开,用于加密;私钥必须保密,用于解密。在Java中,我们可以使用`java.security....
Java中的RSA算法是一种广泛使用的非对称加密技术,它的全称是Rivest-Shamir-Adleman,由三位密码学专家在1977年提出。这种算法基于大整数因子分解的数学难题,提供了相对较高的安全性。在Java中,我们可以利用`java....
RSA算法的安全性基于大数分解的困难性,它在互联网安全传输方面发挥着重要作用。 - **密钥生成**: - 首先选取两个大素数\( p \)和\( q \),计算\( n = pq \)。 - 计算欧拉函数\( \phi(n) = (p-1)(q-1) \)。 - ...
RSA算法基于大数分解难题的原理,使用公钥加密、私钥解密的方式实现信息的加密和解密。 知识点2:Java中RSA加密解密算法的实现 在Java中,可以使用Java Cryptography Architecture(JCA)来实现RSA加密解密算法。...
以上实验内容展示了如何在C++环境下实现RSA算法的基本功能,并提供了相关的数学基础和安全注意事项。通过这些内容的学习与实践,可以更好地理解RSA算法的工作原理及其在实际应用中的优势和局限性。
根据给定的信息,本文将详细解释如何在Java中实现RSA加密算法,并且解析代码中的关键概念与步骤。 ### RSA加密算法简介 RSA是一种非对称加密算法,它基于大数...RSA算法因其安全性高而广泛应用于各种安全通信场景中。
总的来说,RSA算法在Java中的实现涉及了JCE框架的多个组件,通过合理使用这些组件,我们可以方便地进行数据的加密和解密,确保信息的安全性。在实际应用中,还需考虑密钥管理、安全策略以及性能优化等问题。
RSA算法是一种非对称加密算法,它在信息安全领域扮演着重要...Java实现的RSA算法结合了模的重复平方算法和中国剩余定理,提供了安全性和效率。理解和掌握这些知识点对于任何涉及信息安全和加密技术的开发者都至关重要。
JAVA RSA 加密算法 RSA.java RSA公钥加解密,RSA私钥加解密,MD5withRSA 签名 MD5withRSA签名较验
1. **RSA原理**:RSA算法基于数论中的大数因子分解难题,由两个大素数P和Q相乘得到N,然后计算N的欧拉函数φ(N) = (P-1) * (Q-1),选取一个与φ(N)互质的整数E作为公钥的加密指数,再计算E关于φ(N)的模逆数D作为...