RSA原理模拟

static int P = 11;

static int Q = 13;

static int N;

static int M;

static int E;

static int D;

- (instancetype)init

{

self = [super init];

if (self) {

N = P * Q;

M = (P - 1) * (Q - 1);

NSLog(@"N:%zd - M:%zd", N, M);

E = 89;

for (int i = 1; i < INT_MAX; i++) {

if ((i * E) % M == 1 && (i != E)) {

D = i;

break;

}

}

NSLog(@"E:%zd - D:%zd", E, D);

}

return self;

}

- (NSString *)encryptString:(NSString *)string

{

// 1. 将字符串转换成NSData

NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];

NSLog(@"要加密的二进制数据: %@", data);

NSMutableString *strM = [NSMutableString string];

// 2. 取出字符串中的每一个字符

for (int i = 0; i < data.length; i++) {

unsigned char c = 0;

[data getBytes:&c range:NSMakeRange(i, 1)];

int result = 1;

// 3. (c ^ E) % N,为了防止溢出,采用循环取模的方式计算

for (int k = 0; k < E; k++) {

result = result * c % N;

}

printf("%02d ", result);

// 4. 拼接加密字符串

[strM appendFormat:@"%c", result];

}

printf("\n");

return [strM copy];

}

- (NSString *)decryptString:(NSString *)string

{

// 1. 将字符串转换成NSData

NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];

NSLog(@"要解密的二进制数据: %@", data);

NSMutableString *strM = [NSMutableString string];

// 2. 取出字符串中的每一个字符

for (int i = 0; i < data.length; i++) {

unsigned char c = 0;

[data getBytes:&c range:NSMakeRange(i, 1)];

int result = 1;

// 3. (c ^ D) % N,为了防止溢出,采用循环取模的方式计算

for (int k = 0; k < D; k++) {

result = result * c % N;

}

// 4. 拼接加密字符串

[strM appendFormat:@"%c", result];

}

printf("\n");

return [strM copy];

}

/** 判断一个数字是否为质数 */

+ (BOOL)isPrime:(int)n

{

if (n == 0 || n == 1 ) {

return NO;

}

int k = (int)sqrt(n);

int i = 2;

for (; i <= k; i++) {

if (n % i == 0) break;

}

return (i > k);

}

@end

时间: 2024-10-10 20:07:55

RSA原理模拟的相关文章

1.IOC原理模拟

Spring两大核心功能,IOC(Inverse  of  Control)  和 AOP(Aspect-Oriented-Programming) IOC原理模拟: 有这样一个beans.xml: 1 <beans> 2 <bean id="u" class="com.bjsxt.dao.impl.UserDAOImpl" /> 3 <bean id="userService" class="com.bj

在类有成员变量的场景下, 按照虚表原理, 模拟虚函数实现

前言 当类没有成员变量的情况下,   类首地址有4个字节的空间, 这里可以放我们模拟出来的虚表入口地址. 当类有成员变量的情况下, 类首地址就是成员变量,  所以, 为了模拟虚表实现, 需要在成员变量前, 再定义一个int型变量, 用来存放模拟的虚表入口地址. 现在还得不到虚析构函数的地址, 暂时按照非虚析构函数进行模拟. 这个实验是在C++中模拟的. 模拟虚函数实现的用途 在非OOP语言(C语言)中, 模拟类的实现, 可以实现虚函数的效果. 效果 工程下载点 编译环境: vc6sp6 + wi

公钥系统之RSA原理验证

在公钥系统中,我们采用公钥加密,私钥解密的方式,使得报文能够比较安全的传输. 假设A和B通信,但他们之间不通过对称密钥,B有一个公钥K+B和一个私钥K?B.为了与B实现通信,A首先需要获得B的公钥K+B对报文m进行加密,即K+B(m):B收到A的加密报文后用私钥K?B进行解密,即K?B(K+B(m))=m.其中的加解密算法通常使用RSA(RSA取创始人Ron Rivest, Adi Shamir, Leonard Adleman的姓氏首字母). RSA工作方式 加密时,首先把报文m做e次的幂运算

RSA原理说明

长度,建议至少1024.模数n(常取默认65537)两边都要用. 指数e,和n一起就是公钥. 指数d,和n一起就是私钥. 质数p和q用于生成密钥对,然后就丢弃不公开. 用公钥(n, e)加密:明文e ≡ 密文 (mod n) 用私钥(n, d)解密:密文d ≡ 明文 (mod n) 上述表达式是同余式,也就是"≡"两边mod n是相等的.mod运算就是取被除数 / 除数得到的余数,运算符是%.比如5%3=2.所以上式也可表达成 用公钥(n, e)加密:密文 = 明文e % n 用私钥(

4.AOP原理模拟

AOP   Aspect-Oriented-Programming    面向切面编程 a)是对面向对象的思维方式的有力补充 好处:可以动态的添加和删除在切面上的逻辑而不影响原来的执行代码 a)Filter b)Struts2 的 interceptor Spring AOP的实现依赖于 Java的 Proxy 类 1.首先创建目标对象(需要被代理的对象)(即该对象的方法的执行前后有业务逻辑的添加) UserService service =  new UserServiceImpl(); 2.

RSA原理记录

1.找出两个“很大”的质数:P & Q N = P * Q M = (P – 1) * (Q – 1) 2.找出整数E,E与M互质,即除了1之外,没有其他公约数 3.找出整数D,使得 ED 除以 M 余 1,即 (E D) % M = 1,等价于E*D-1=K*M 4.经过上述准备工作之后,可以得到: E是公钥,负责加密 D是私钥,负责解密 N负责公钥和私钥之间的联系 5.加密算法,假定对X进行加密 (X ^ E) % N = Y 6.解密算法,根据费尔马小定义,可以使用以下公式完成解密 (Y

python全栈系列之---cookie模拟登陆和模拟session原理

cookie模拟登陆: import tornado.web class IndexHandler(tornado.web.RequestHandler): def get(self): #self.write("Hello world") # 展示所有的cookie # print(self.cookies) # print(self.get_cookie('k1')) # self.set_cookie('k1','999')#还有 过期时间 适用路径 # self.render(

RSA算法详解

1.RSA加密算法是最常用的非对称加密算法 2.RSARSA以它的三个发明者Ron Rivest, Adi Shamir, Leonard Adleman的名字首字母命名, 3.目前学术界无法证明RSA算法的绝对正确性,但是也无法证明否定它的安全性,因此恰恰说明该算法有相当的可信性. 4.RSA原理基于大数分解的难度,其公钥和私钥是一对大素数对的函数,从一个公钥和密文恢复出明文的难度,等价于分解两个大素数之积(这是公认的数学难题) 5.具体的加密,解密,流程 RSA的公钥.私钥的组成,以及加密.

非对称加密过程详解(基于RSA非对称加密算法实现)

1.非对称加密过程: 假如现实世界中存在A和B进行通讯,为了实现在非安全的通讯通道上实现信息的保密性.完整性.可用性(即信息安全的三个性质),A和B约定使用非对称加密通道进行通讯,具体过程如下: 说明: 国内目前使用双证书体系,即用户同时拥有签名证书.加密证书两张证书.签名证书是用户的身份认证,是和CA协商的结果,可用于对用户A的身份验证:加密证书是用来对信息进行加密,是用户和秘钥管理系统生成.我们在这里假设都适合CA进行交互. ①:此过程是生成公钥私钥的过程,我们这里基于RSA算法实现,RSA