【问题标题】:how to encrypt and decrypt a message by using RSA with signature in android如何在android中使用带有签名的RSA加密和解密消息
【发布时间】:2011-06-22 08:32:00
【问题描述】:

没有密钥分配,用户将知道公钥和私钥(不会使用随机密钥生成器)。我必须用私钥加密散列消息才能提供签名 消息只有 10-20 个字符,因此系统可以尽可能简单

【问题讨论】:

  • 我知道已经 5 年了,但我不知道问题是什么。 :(

标签: android certificate rsa encryption


【解决方案1】:

要生成数字签名,您不需要加密哈希。签名是一个单独的加密原语;无论如何,哈希都没有加密,有一些填充。也就是说,代码是:

Signature Signer = Signature.getInstance("SHA1withRSA");
Signer.initSign(MyKey, new SecureRandom()); //Where do you get the key?
byte []Message = MyMessage(); //Initialize somehow
Signer.update(Message, 0, Message.length);
byte [] Signature = Sign.sign();

【讨论】:

  • 感谢您的回答在我的项目中,我必须使用 RSA,根据我的主管批准的安全协议,我应该这样做:A->BE(PUBb, [M, E( PRIa, H(M)]) 1. B 必须确保消息来自 A(通过签名:H(M) 已被 PRIa 加密,因此只有 A 可以对其进行加密) 2. 只有 B 必须能够读取此消息; 整个消息被 PUBb 加密,所以只有 B 可以用他的私钥解密它
  • 你现在能帮我看看如何在 java 中执行此操作(适用于 android)吗?
【解决方案2】:

好的,备份并告诉我们您想要什么。您是想通过保护消息内容来获得隐私,还是通过证明消息确实来自发件人来保证真实性

如果您正在寻找隐私,那么 RSA 不是最佳选择:使用 RSA 生成私有/公共对,然后使用它们交换密钥 - 或带外交换密钥。使用 AES 等流式算法对消息进行加密。

如果您只想通过签名来显示消息是由您认为的人发起的,那么请查看数字签名上的Wiki article——它相当简单。

【讨论】:

  • “像 AES 一样的流式算法”我认为这种表述有点误导,因为 AES 是块密码而不是流密码。
  • 他在问题中说签名。
  • 他还说“用私钥加密散列消息”。
  • 嗯,这就是签名。
  • 不,不是。消息仍以明文形式显示。如果它正在加密消息,那么消息就会被加密。
猜你喜欢
  • 2020-08-05
  • 2023-01-19
  • 2013-08-29
  • 1970-01-01
  • 2011-02-08
  • 2015-02-27
  • 1970-01-01
  • 2018-02-13
  • 1970-01-01
相关资源
最近更新 更多