首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >适用于Arduino的RSA加密、解密函数

适用于Arduino的RSA加密、解密函数
EN

Stack Overflow用户
提问于 2016-08-28 07:44:58
回答 1查看 6.2K关注 0票数 2

我需要加密数据与RSA使用公钥和解密使用私钥。不需要生成公钥和私钥。我知道该算法需要计算资源,但我只使用32-128位密钥或更小的密钥。我在互联网上找不到Arduino的RSA库。

我找到了AVR微控制器的密码学AVR-Crypto-Lib库。如何在Arduino中使用这个库?我认为Arduino兼容,因为它使用ATmega328P,ATmega2560微控制器等。如何在Arduino IDE中包含这个库。如果有人能写出简单的hello world示例就好了。也可以推荐其他实现RSA算法的库。

EN

回答 1

Stack Overflow用户

发布于 2020-09-14 14:22:51

我使用Arduino的random()开发了以下代码。但是代码在10次迭代中运行一次,也是在8位密钥。

代码语言:javascript
运行
AI代码解释
复制
#include "pRNG.h"
#include <Arduino.h>

unsigned int Firstprime, Secondprime, Privatekey, Publickey;
unsigned int Field, phin, Enc, Dec;
bool Hasrun= false;
unsigned int Text = 12;


pRNG prn;


unsigned int modMult(unsigned int a, unsigned int b, unsigned int mod) //modulo multiplication function
{ 
    unsigned int res = 0; // Initialize result 
    a = a % mod; 
    while (b > 0) 
    { 
        // If b is odd, add 'a' to result 
        if (b % 2 == 1) 
            res = (res + a) % mod; 
  
        // Multiply 'a' with 2 
        a = (a * 2) % mod;   
        // Divide b by 2 
        b /= 2; 
    } 
  
    // Return result 
    return res % mod;
  
  

} 
bool prime(unsigned int number) //primality check for prime numbers
{
   
     for (unsigned int i = 2; i <=sqrt(number); ++i) 
        {
            if (number % i == 0) 
            {
                return false;
            }
         }
        return true;
  }
  

unsigned int PRN()   //generation of a prime random number
{
 unsigned int n1;
 do
  { 
    n1= prn.getRndByte();
    //n1= random(100);
   }while(n1==0||prime(n1)==false); 
   return n1;
}
unsigned int gcd(unsigned int a, unsigned int b) //function to check GCD
{ 
    unsigned int temp; 
    while (1) 
    { 
        temp = a%b; 
        if (temp == 0) 
         return b; 

       a = b; 
       b= temp;
         
    } 
} 
unsigned int E_gen(unsigned int n, unsigned int phi)   //publickey generation e
{
    for(unsigned int i=2; i<n; i++)
     {
       if(gcd(i,n)==1 && gcd(i,phi)==1)
       {
         return i;
         //break;
       }
        
     }
   Serial.println("Public key generated");
 }

unsigned int D_gen(unsigned int en, unsigned int phi) //privatekey generation d
{
  for(unsigned int i=2; i<phi; i++)
  {
    if(modMult(en,i,phi)==1)
    {
      return i;
      //break;
    }
     
  }
   Serial.println("Private key generated");
  }
unsigned int power(unsigned int base, unsigned int expo, unsigned int mod)  
{  
    unsigned int test;
    for(test = 1; expo; expo >>= 1)
    {
        if (expo & 1)
            test = (test * base) % mod;
        base = (base * base) % mod;
    }

    return test;
} 
 /*unsigned int keygen()
 {
  
  
 }*/
void setup()
{
   Serial.begin(9600);
  // randomSeed(analogRead(A0));
    Firstprime=PRN();
   Serial.println(Firstprime);
   do
   {  
   Secondprime=PRN();
   Serial.println(Secondprime);
   }while(Firstprime==Secondprime); 
  Field=Firstprime*Secondprime;
  phin=(Firstprime-1)*(Secondprime-1);
  Publickey=E_gen(Field, phin);
  Privatekey=D_gen(Publickey,phin);  
  
}

void loop()
{
  if(Hasrun==false)
  {
     //Serial.println(prn.getRndunsigned int());
    
    Serial.print("Public key is:");
    Serial.println(Publickey);
    Serial.print("Private key is:");
    Serial.println(Privatekey);
    Serial.println("Encrypting....");
    Enc= power(Text,Publickey, Field);
    Serial.println(Enc);
    Serial.println("Decrypting...");
    Dec=power(Enc,Privatekey, Field);
    Serial.println(Dec);
    /*Serial.println(p);
    Serial.println(q);*/

    Hasrun=true;
      
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39189065

复制
相关文章
RSA加密/解密
RSA加密算法是一种可逆的非对称加密算法,即RSA加密时候用的密钥(公钥)和RSA解密时用的密钥(私钥)不是同一把。基本原理是将两个很大的质数相乘很容易得到乘积,但是该乘积分解质因数却很困难。RSA算法被广泛的用于加密解密和RSA签名/验证等领域。
arnodev
2023/03/17
6.8K0
RSA登录加密_rsa私钥加密公钥解密
网站:aHR0cHM6Ly9iZWlqaW5nLnR1aXR1aTk5LmNvbS9kZW5nbHUuaHRtbA==
全栈程序员站长
2022/10/02
10.1K0
RSA登录加密_rsa私钥加密公钥解密
Golang RSA加密解密程序
package main import ( "crypto/rand" "crypto/rsa" "crypto/x509" "encoding/pem" "errors" "fmt" ) // 加密 func RsaEncrypt(origData []byte) ([]byte, error) { block, _ := pem.Decode(publicKey) //将密钥解析成公钥实例 if block == nil { return nil, errors.New("public key
李海彬
2018/03/21
6.7K0
用openssl库RSA加密解密
1 #include <stdio.h> 2 #include <openssl/rsa.h> 3 #include <openssl/pem.h> 4 #include <openssl/err.h> 5 6 //加密 7 int my_encrypt(const char *input, int input_len, char *output, int *output_len, const char *pri_key_fn) 8 { 9 RSA *p_rsa =
窗户
2018/02/07
3.6K0
RSA密码学加密与解密
什么是RSA RSA算法是现今使用最广泛的公钥密码算法,也是号称地球上最安全的加密算法。在了解RSA算法之前,先熟悉下几个术语 根据密钥的使用方法,可以将密码分为对称密码和公钥密码 对
知识浅谈
2020/03/25
1.5K0
iOS中使用RSA加密与解密
通常我们使用iOS的RSA加密或者解密时候,有如下几种情况(这里只讨论使用公钥加密的情况):
conanma
2021/11/04
4.8K0
jsrsasign 前端 RSA 加密 node 端解密
有些场景下需要前端做加密,比如登录的时候,用户输入的密码需要传输给后端,为了保证安全,最好前端先加密后传输,后端接收到之后,再解密拿到明文。 需要在不同端进行加密解密的话 RSA 非对称加密算法最适合。
solocoder
2023/04/23
5.8K1
jsrsasign 前端 RSA 加密 node 端解密
最通俗易懂的RSA加密解密指导
RSA加密算法是一种非对称加密算法,简单来说,就是加密时使用一个钥匙,解密时使用另一个钥匙。
Kiba518
2020/06/23
1.3K0
最通俗易懂的RSA加密解密指导
RSA公钥加密私钥解密实例
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/details/79966871
DannyHoo
2018/09/13
4.3K0
RSA公钥加密私钥解密实例
Java使用RSA加密解密签名及校验
再来一个Base64的类,当然你也可以用commons-codec-1.9.jar
全栈程序员站长
2021/04/13
4.4K0
Java使用RSA加密解密签名及校验
关于JSEntrypt.js加密 Java RSA解密
首先Java可以定义一个全局处理的一个类,通过实现RequestBodyAdvice来进行统一接口请求参数处理。实现RequestBodyAdvice后重写一个方法beforeBodyRead。
@派大星
2023/06/28
5530
关于JSEntrypt.js加密 Java RSA解密
Python crypto模块实现RSA和AES加密解密
RSA加密算法是一种非对称加密算法。RSA 是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。RSA就是他们三人姓氏开头字母拼在一起组成的。
Python碎片公众号
2021/02/26
10.2K0
Python crypto模块实现RSA和AES加密解密
RSA密文过长加密解密 越过1024的解决代码
RSA (详见维基百科)算法是现今使用最广泛的公钥密码算法,也是号称地球上最安全的加密算法,与 md5 和 sha1 不同,到目前为止,也只有极短的RSA加密被破解。
Tinywan
2019/07/16
5K0
经典加密解密函数
<?php /** * 加密解密函数 * @param string $string 明文 或 密文 * @param string $operation DECODE 解密 | EN
joshua317
2018/04/16
7350
[Golang软件推荐] RSA公私钥加解密(解决Golang私钥加密公钥解密问题)
安全是软件开始中很重要的一个环节,在金融场景以及设计资产的场景下更是如此,在加密算法中主要使用较多加密方式分别是对称加密和非对称加密,对称加密中的代表是AES,DES,3DES等,非对称加密中使用比较多的是RSA,ECC等,最近火热的比特币中就使用ECC椭圆曲线算法,本篇文章主要是笔者在使用Golang在使用RSA中使用私钥加密公钥解密中遇到的问题,以及寻找的解决方案进行阐述,希望可以帮助到大家! 附上: 喵了个咪的博客:w-blog.cn gorsa-Github地址:https://github.c
喵了个咪233
2018/03/02
4.4K0
[Golang软件推荐] RSA公私钥加解密(解决Golang私钥加密公钥解密问题)
Golang RSA 生成密钥、加密、解密、签名与验签
RSA 是最常用的非对称加密算法,由 Ron Rivest、Adi Shamir、Leonard Adleman 于1977 年在麻省理工学院工作时提出,RSA 是三者姓氏首字母的拼接。
恋喵大鲤鱼
2023/10/12
2.5K0
Golang RSA 生成密钥、加密、解密、签名与验签
C#使用RSA证书文件加密和解密示例
修改MSDN上的示例,使之可以通过RSA证书文件加密和解密,中间遇到一个小问题。 Q:执行ExportParameters()方法时,回报CryptographicException:该项不适于在指定状态下使用(Key not valid for use in specified state)。 A:导入带有私钥的证书时,需要使用"X509KeyStorageFlags"参数标记"私钥可导出"。 X509Certificate2 prvcrt = new X509Certificate2(@"X:\path
庞小明
2018/03/07
2.2K0
点击加载更多

相似问题

RSA加密/解密

13

RSA加密/解密

11

实现RSA加密/解密

111

RSA加密:解密函数出错

14

RSA加密/解密问题

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档