rsa

【逆向】RSA编码解码基础

痴心易碎 提交于 2020-03-23 08:21:24
序言 本文主要讲述RSA加密算法的基础知识,其内容主要用于逆向分析算法部分的基础铺垫,如需文章以外的知识请自行查阅相关资料。 RSA简介 RSA是一种 公钥密码算法 或 非对称加密算法 ,它的名字是由它的三位开发者的姓氏首字母组成的(Rivest-Shamir-Adleman)。 公钥密码算法的密钥分为2种:" 加密密钥 "、" 解密密钥 "。只要拥有加密密钥,任何人都可以进行加密,但没有解密密钥是无法进行解密的。 公钥和私钥是一一对应的,一个公钥和一个私钥的组合被称为" 密钥对 ",由于密钥之间有着非常密切的关系,因此公钥和私钥 必须同时生成 。 RSA算法 在RSA中"明文"、"密文"、"密钥"都是数字。 RSA的加密、解密过程可以使用如下公式来表述: 密文 = 明文 E mod N //将明文和自己做E次方乘法,然后将其结果除以N求余数。 明文 = 密文 D mod N //将密文和自己做D次方乘法,然后将其结果除以N求余数。 根据以上内容,我们得出如下结论: 密钥对的生成 因为 'E'和'N'是公钥 , 'D'和'N'是私钥 ,所以密钥对的生成就是求"E"、"D"、"N"三个数的过程。 参考:《图解密码技术》 来源: https://www.cnblogs.com/SunsetR/p/11478337.html

RSA公钥文件解密密文的原理分析

三世轮回 提交于 2020-03-23 01:05:29
前言   最近在学习RSA加解密过程中遇到一个这样的难题:假设已知publickey公钥文件和加密后的密文flag,如何对其密文进行解密,转换成明文~~ 分析   对于rsa算法的公钥与私钥的产生,我们可以了解到以下产生原理: 公钥与私钥的产生 随机选择两个不同大质数 $p$ 和 $q$,计算 $N = p \times q$ 根据欧拉函数,求得 $r=\varphi (N)=\varphi (p)\varphi (q)=(p-1)(q-1)$ 选择一个小于 $r$ 的整数 $e$,使 $e$ 和 $r$ 互质。并求得 $e$ 关于 $r$ 的模反元素,命名为 $d$,有 $ed\equiv 1 \pmod r$ 将 $p$ 和 $q$ 的记录销毁 此时,$(N,e)$ 是公钥,$(N,d)$ 是私钥。 消息加密 首先需要将消息 $m$ 以一个双方约定好的格式转化为一个小于 $N$,且与 $N$ 互质的整数 $n$。如果消息太长,可以将消息分为几段,这也就是我们所说的块加密,后对于每一部分利用如下公式加密: $$ n^{e}\equiv c\pmod N $$ 消息解密 利用密钥 $d$ 进行解密。 $$ c^{d}\equiv n\pmod N $$ 我们可以知道,RSA公钥主要有两个信息:模数(modulus)和指数(exponent),也就是我们所说的N和e

Error Creating JWT Token using RSA Security Key with key size less than 2048

落花浮王杯 提交于 2020-03-22 08:55:50
问题 I'm facing an exception when trying to create a JWT token in C# Web API application. Test environment Platform: Windows 10 x64 with .net framework: 4.6.1 jwt NuGet package: System.IdentityModel.Tokens.Jwt version: 4.0.2.206221351 Here is the code responsible for generating RSA keys: public SignatureInformation CreateNewSignatureInformation(int length = 0) { try { var signatureInformation = new SignatureInformation(); var rsaProvider = new RSACryptoServiceProvider(length); var publicKey =

Error Creating JWT Token using RSA Security Key with key size less than 2048

耗尽温柔 提交于 2020-03-22 08:54:20
问题 I'm facing an exception when trying to create a JWT token in C# Web API application. Test environment Platform: Windows 10 x64 with .net framework: 4.6.1 jwt NuGet package: System.IdentityModel.Tokens.Jwt version: 4.0.2.206221351 Here is the code responsible for generating RSA keys: public SignatureInformation CreateNewSignatureInformation(int length = 0) { try { var signatureInformation = new SignatureInformation(); var rsaProvider = new RSACryptoServiceProvider(length); var publicKey =

RSA公钥私钥的作用

戏子无情 提交于 2020-03-20 11:06:35
RSA算法广泛应用与加密与认证两个领域 1.加密(保证数据安全性) 使用公钥加密,需使用私钥解密。 这种广泛应用在保证数据的安全性的方面,用户将自己的公钥广播出去,所有人给该用户发数据时使用该公钥加密,但是只有该用户可以使用自己的私钥解密,保证了数据的安全性。 2.认证(用于身份判断) 使用私钥签名,需使用公钥验证签名。 用户同样将自己的公钥广播出去,给别人发送数据时,使用私钥加密,在这里,我们更乐意称它为签名,然后别人用公钥验证签名,如果解密成功,则可以判断对方的身份。 总结:(摘抄自: https://www.cnblogs.com/scofi/p/6617394.html ) ———————————————— 版权声明:本文为CSDN博主「lijinshanba」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接: https://blog.csdn.net/lijinshanba/article/details/82117041 来源: https://www.cnblogs.com/barry-cbt/p/12530035.html

JAVA_RSA密钥生成

我的梦境 提交于 2020-03-20 05:13:15
在网上找了下RSA的密钥的创建,结果全是用java序列化PublicKey和PrivateKey来保存,就自己写了个RSA公钥和私钥的创建,及进行Base64编码后保存。 这里用到了 bcprov-jdk16-1.4.5.jar ,可以在 http://www.bouncycastle.org/ 官方主页上下载. public static void createKeyPairs() throws Exception { Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider()); // create the keys KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA", "BC"); generator.initialize(512, new SecureRandom()); KeyPair pair = generator.generateKeyPair(); PublicKey pubKey = pair.getPublic(); PrivateKey privKey = pair.getPrivate(); byte[] pk = pubKey.getEncoded(); byte[] privk =

Golang 实现RSA加密解密

筅森魡賤 提交于 2020-03-18 14:11:33
生成RSA证书: openssl方式生成 生成私钥 openssl genrsa -out rsa_private_key.pem 1024 生成公钥 openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem Go代码方式生成 package main import ( "crypto/rand" "crypto/rsa" "crypto/x509" "encoding/pem" "os" ) //生成RSA私钥和公钥,保存到文件中 // bits 证书大小 func GenerateRSAKey(bits int) { //GenerateKey函数使用随机数据生成器random生成一对具有指定字位数的RSA密钥 //Reader是一个全局、共享的密码用强随机数生成器 privateKey, err := rsa.GenerateKey(rand.Reader, bits) if err != nil { panic(err) } //保存私钥 //通过x509标准将得到的ras私钥序列化为ASN.1 的 DER编码字符串 X509PrivateKey := x509.MarshalPKCS1PrivateKey(privateKey) //使用pem格式对x509输出的内容进行编码 /

Git 生成 && 配置SSH key,配置多个SSH key

拟墨画扇 提交于 2020-03-17 20:47:56
一、Git 生成 && 配置SSH key 步骤: 1.配置姓名和邮箱 git config --global user.name "xb12369" git config --global user.email "1234@qq.com" 2.生成密钥,一路回车, ssh-keygen -t rsa -C "1234@qq.com" 生成密钥成功,如下图 3.添加SSH key到GitHub上 打开id_rsa.pub,把id_rsa.pub文件的内容即密钥放到github上。 GitHub -> Settings -> SSH and GPG keys,点击 New SHH key,把id_rsa.pub文件的内拷贝到内容区,为添加的SSH key 添加一个名称,点击Add SSH kye。添加成功 4.测试是否连接上GitHub ssh -T git@github.com //如果是gitlab ,就使用下面的语句 ssh -T git@gitlab.com 二、生成多个ssh key,配置Gitlab 和 Github 配置多个git账号:如gitlab和github,那个就配置两个账号:一个global全局的账号,和配置一个local 当前项目范围的账号 步骤 1.配置姓名和邮箱 ssh -T git@github.com //如果是gitlab ,就使用下面的语句

RSA/RSA2 进行签名和验签

早过忘川 提交于 2020-03-17 00:43:26
1 package com.byttersoft.hibernate.erp.szmy.util; 2 3 import java.io.ByteArrayInputStream; 4 import java.io.IOException; 5 import java.io.InputStream; 6 import java.io.InputStreamReader; 7 import java.io.Reader; 8 import java.io.StringWriter; 9 import java.io.Writer; 10 import java.security.KeyFactory; 11 import java.security.PrivateKey; 12 import java.security.PublicKey; 13 import java.security.spec.PKCS8EncodedKeySpec; 14 import java.security.spec.X509EncodedKeySpec; 15 import java.util.ArrayList; 16 import java.util.Collections; 17 import java.util.List; 18 import java.util.Map; 19 20

need to convert following Signnature verification python code to Android?

喜你入骨 提交于 2020-03-16 07:38:32
问题 I create to python3 application that generate the RSA key pairs. from Crypto.PublicKey import RSA print("--Private Key Generate--") key = RSA.generate(2048) private_key = key.export_key() file_out = open("key/private.pem", "wb") file_out.write(private_key) file_out.close() print("--Public Key Generate--") public_key = key.publickey().export_key() file_out_1 = open("key/receiver.pem", "wb") file_out_1.write(public_key) file_out_1.close() print("key Generated") I sign some data using python and