PHP学习之八:扩展函数库之基本类型与变量的扩展

RSA加密算法详解及例题 这是我自己在学习RSA加密算法的时候自己整理的笔记,如需转载请注明出处 RSA加密算法 我这里就不对RSA的发明背景做介绍了,你只要知道RSA加密算法是非常非常重要的加密算法,放在现在的时代亦是如此。 RSA加密算法的安全性是基于对极大整数做因数分解的困难。 RSA算法是一种非对称密码算法,所谓非对称,就是指该算法需要一对密钥,使用其中一个加密,则需要用另一个才能解密。例如: (1)乙方生成两把密钥(公钥和私钥)。公钥是公开的,任何人都可以获得,私钥则是保密的。 (2)甲方获取乙方的公钥,然后用它对信息加密 阅读详情

1 类/对象

__autoload(string  $name)   用于自动加载类
bool class_alias($old,$new)     将类名取别名
bool class_exists($name,$autoload=false)   检查类是否定义
array  get_class_methods($name)   返回类的所有方法列表
array  get_class_vars($name)  返回类的所有属性列表
array  get_object_vars()   返回由对象属性组成的关联数组

string  get_class($obj)   返回对象的类名
string  get_parent_class($obj)  返回对象或类的父类名

get_declared_classes  get_declared_interfaces get_decleared_traits  返回脚本中已经定义的类、接口、特性

bool  is_a($obj,$class)   检查对象是否为类的实例
bool  is_subclass_of($obj,$name)   检查对象是否为类的子类

method_exists($name,$cname)    检查类是否定义了方法
property_exists($name,$cname)   检查类是否定义了属性


2 变量处理

debug_zval_dump()    dump一个变量信息,包含了引用计数

doubleval()  intval()  strval   转换为浮点型/整形/字符型
get_resource_type() 返回资源类型
settype/gettype() 设置及 获取变量类型

is_array   is_bool  is_callable  is_double  is_float  is_int   is_long  is_null is_numberic  is_object  is_resource  is_string

var_dump/var_export/print_r  打印变量,三者输出格式略有不同


3  函数处理

mixed  call_user_func_array(callable $func, array $params)   回调func并传参数
array   func_get_args(void)          返回函数的所有参数
int        func_num_args(void)       返回函数的参数个数
mixed  func_get_arg(int $num)   返回函数的第num个参数
bool    function_exists($name)    检查函数是否已定义
register_shutdown_function($callback [,$param...])  注册脚本结束时执行函数


<?php
function foobar($arg, $arg2) {
    echo __FUNCTION__, " got $arg and $arg2\n";
}
class foo {
    function bar($arg, $arg2) {
        echo __METHOD__, " got $arg and $arg2\n";
    }
}


// Call the foobar() function with 2 arguments
call_user_func_array("foobar", array("one", "two"));

// Call the $foo->bar() method with 2 arguments
$foo = new foo;
call_user_func_array(array($foo, "bar"), array("three", "four"));
?> 


4 反射

反射提供了对PHP类、对象的反向工程能力,可以获取类、对象、函数、成员方法、成员属性的各种信息,先看下反射子的类层次。

反射的类层次

反射子作为基类提供了export的静态方法。反射子可被Reflection类的export($reflector)静态方法导出详细信息。其中ReflectionClass类用来获取PHP类的信息,ReflectionObject用来获取PHP对象的信息。RefectionMethod用于获取成员方法的信息,而ReflectionFunction用于获取函数的信息。ReflectionProperty用于获取类的成员属性的信息。ReflectionParameter用于获取方法及函数的参数的信息。ReflectionExtension用于获取PHP扩展的信息。这些函数拥有的构造函数可以直接生成各种反射子,各种反射子之间也可以通过成员函数导出。例如Method对象可以通过Class的getMethod方法获得,而parmeter可以通过函数及方法的getParameter方法获得。径向的函数也可以获得其所声明的类名等。 

具体类的成员方法的作用不在这里说明,通过名称要以比较好了解其作用。反射的作用很多,反射可以用来反向工程没有文档的PHP类或扩展,获得相关的信息及注释等信息。另一种用处是通过反射提供查找类作用,获取实例特定接口的所有插件。

这里有一篇讲解利用PHP反射来加载插件的框架。http://dengbaoleng.iteye.com/blog/1504589

5 过滤器

首先介绍一下过滤器的类型Validate与Sanitize,前者用于验证,后者用于纠正

FILTER_VALIDATE_BOOLEAN  检查bool型    

FILTER_VALIDATE_EMAIL          FILTER_SANITIZE_EMAIL

FILTER_VALIDATE_FLOAT         FILTER_SANITIZE_NUMBER_FLOAT

FILTER_VALIDATE_INT               FILTER_SANITIZE_NUMBER_INT

FILTER_VALIDATE_IP

FILTER_VALIDATE_URL             FILTER_SANITIZE_URL

FILTER_VALIDATE_REGEXP


mixed  filter_var(mixed $var , int $filter_type, mixed $opt)   从$var中按照指定的类型与选项进行过滤,返回过滤后的结果。

filter_input($type, $var, int $filter,$opt)  

bool  filter_has_var($type, $var)  检查特定类型变量是否存在   

<?php
$a = 'joe@example.org';
$b = 'bogus - at - example dot org';
$c = '(bogus@example.org)';

$sanitized_a = filter_var($a, FILTER_SANITIZE_EMAIL);
if (filter_var($sanitized_a, FILTER_VALIDATE_EMAIL)) {
    echo "This (a) sanitized email address is considered valid.\n";
}

$sanitized_b = filter_var($b, FILTER_SANITIZE_EMAIL);
if (filter_var($sanitized_b, FILTER_VALIDATE_EMAIL)) {
    echo "This sanitized email address is considered valid.";
} else {
    echo "This (b) sanitized email address is considered invalid.\n";
}

$sanitized_c = filter_var($c, FILTER_SANITIZE_EMAIL);
if (filter_var($sanitized_c, FILTER_VALIDATE_EMAIL)) {
    echo "This (c) sanitized email address is considered valid.\n";
    echo "Before: $c\n";
    echo "After:  $sanitized_c\n";    
}
?> 


6 Classkit

本扩展定义的函数允许在运行时动态操作PHP类。

classkit_import( $filename)

classkit_method_add()

classkit_method_copy()

classkit_method_redefine()

classkit_method_remove()

classkit_method_rename()





RSA —— 经典的非对称加密算法 RSA —— 经典的非对称加密算法 学会rsa解密首先要了解什么是RSA加密算法 这篇文章将会带你深入学习RSA算法的原理 并会持续附上相关算法和题目 敬请期待 阅读详情

相关推荐

多素数RSA系统简介

普通的RSA系统,在生成密钥时使用两个大素数,以它们的乘积作为模。本文介绍一种PKCS#1 V2.1中描述的“多素数RSA系统”,它可以使用超过两个素数的乘积作为模。  多素数RSA密钥产生算法如下:1.        生成k个素数p1, p2, …, pk2.        求k个素数的乘积n=∏pi, i=1,2,…,k3.        求Euler函数值φ(n)=∏(pi-1)4.  

4340

菜鸟学php扩展 之 详解php扩展的变量(四)

前言经过前文 菜鸟学php扩展 之 详解扩展函数的传参(如何获取参数)(三) ,基本上已经明白了php调用扩展时候,按道理应该要是来记录一下,如何返回结果的。但是突然总结时候发现,结果的返回之前必须要记录一下扩展函数的变量相关知识点,这样更好理解如何返回结果,毕竟返回的结果基本都是变量。正文变量的结构与类型PHP在内核中是通过zval这个结构体来存储变量的,所以写扩展的时候当然也是一样。 在Ze

咖啡色的羊驼 4186

密码学之RSA算法

RSA算法由Ron Rivest、Adi Shamir和Leonard Adleman于1977年提出,得名于他们姓氏的首字母。最初设计用于解决密钥分发问题,现已广泛应用于数据加密、数字签名等。fill:#333;color:#333;color:#333;fill:none;1976年 Diffie-Hellman密钥交换算法1977年 RSA算法提出1983年 MIT申请专利2000年代 分布式计算和量子计算理论挑战RSA安全性RSA算法以其安全性和广泛的应用在现代密码学中占据重要地位。

零度°C的博客 6371

RSA算法原理及实现(Java)

基本介绍 RSA加密算法是一种非对称加密算法。这就意味着通过这个算法,你即将获得一对密钥,分别是公钥和私钥。你可以将公钥公布出去,别人利用你的公钥加密后的内容,只能使用你的私钥来解开,即可保证你和别人通信的安全性,这就是这个加密算法的意义所在。 算法步骤 参考来自:25行代码实现完整的RSA算法 (1)选择p、q两个超级大的质数,都是1024位。(1)选择 p、q两个超级大的质数 ,都是1024位...

星留影的刹那间 5112

密码学—如何随机生成大素数以及Miller Rabin素性检测方法

素数被利用在密码学上,所谓的公钥就是将想要传递的信息在编码时加入质数,编码之后传送给收信人,任何人收到此信息后,若没有此收信人所拥有的密钥,则解密的过程中(实为寻找素数的过程),将会因为找质数的过程(分解质因数)过久,使即使取得信息也会无意义 给出两个大素数,很容易就能将它们两个相乘。但是,给出它们的乘积,找出它们的因子就显得不是那么容易了。这就是许多现代密码系统的关键所在。如果能够找到解决整数分

魏尔肖的博客 3万+

RSA加密算法

前言 一、RSA算法简介 RSA公开密钥密码体制的原理是:根据数论,寻求两个大素数比较简单,而将它们的乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。 RSA绝对是当今应用最为广泛的加密算法,像数字签名,数字证书,SSH,HTTPS加密连接全部都是他的典型应用。 二、数学基础 1.互质 互质又称为互素,如果两个或两个以上的整数的最大公约数是 1,则称它们为互质。 2.欧拉函数 欧拉函数指的是对正整数n,求小于或等于n的正整数中与n互质的数的数目,记作φ(n)。 3.欧拉定理 欧拉定理也称费马-

xuanli4845的博客 1万+

Python实现RSA加解密算法

RSA是一种基于数论的非对称加密算法,利用了大数分解的计算复杂性。与对称加密算法不同,RSA使用一对密钥:公钥用于加密,私钥用于解密。这意味着即使加密密钥被公开,只有拥有解密密钥的人才能解密密文。RSA作为一种经典的非对称加密算法,依赖于大数分解的难度以保证安全性。通过上述的Python实现,我们不仅掌握了RSA的核心算法原理,也了解了密钥生成、加密和解密的过程。尽管本文中实现的RSA算法是简化版,但它提供了一个良好的基础,使你能进一步探索加密领域的复杂算法和应用。

闲人编程的博客 3208

java的rsa加密算法_用java编程实现RSA加密算法

RSA加密算法是目前应用最广泛的公钥加密算法,特别适用于通过Internet传送的数据,常用于数字签名和密钥交换。那么我今天就给大家介绍一下如何利用Java编程来实现RSA加密算法。一、RSA加密算法描述RSA加密算法是1978年提出的。经过多年的分析和研究,在众多的公开密钥加密算法中,RSA加密算法最受推崇,它也被推荐为公开密钥数据加密标准。由数论知识可知,若将一个具有大素数因子的合数进行分解是...

weixin_36425412的博客 3760

基于Matlab的对RSA加密算法的一个验证

简介 博主最近有一个讨论课要找点东西讲,浏览网页的时候恰巧看到了RSA算法的博客,介绍得很详细,感兴趣的朋友可以前去阅读: RSA算法原理 看了这篇博客才知道RSA算法原来是最重要的不对称加密算法之一,也很有趣,于是打算选这个题目。加上曾经有一点基础的数论知识,对相关的内容也不陌生。RSA算法成功的保障在于,对于一个由两个大素数p,q乘积得到的大整数n=pq,将其进行因式分解是很困难的。(最

hzberg的博客 5894

RSA算法基础

算法笔记:RSA算法基础RSA算法基础简介算法基础算法详解大整数表示素数产生Euclid算法模幂算法Montgomery算法RSA算法实例RSA-CRT RSA算法基础 简介 RSA算法由Ron Rivest、Adi Shamir和Leonard Adleman于1977年提出,算法名字由三人名字开头字母组成。该算法是当前公钥密码体系中的算法基础。RSA算法的安全性依赖于“大整数因字分解问题是NP-hard的问题”这一假设。本文简单介绍RSA算法的数学基础,以及相关的一些算法知识。 算法基础 RSA算法可以

云楼主的博客 1364

RSA算法过程

构造一个公钥密码系统的要求 产生一对密钥是计算可行的 发送方利用公钥和明文,产生密文是计算可行的 接收方利用私钥和密文,产生明文是计算可行的 对于攻击者,利用公钥来推断私钥是计算不可行的 已知公钥和密文,恢复明文是计算不可行的 (可选) 加密和解密的顺序可交换 RSA 算法的起源 RSA 算法在1977年由MIT 的Ron Rivest、Adi Shamir 和Leonard Adleman...

湫一 7165

[python]rsa加密算法的一个简单实现

rsa

bupt池的专栏 6748

RSA算法的详细设计(C++)及不同优化策略的比较

本篇文章总结了我对RSA算法的理解和设计,并在后文对优化运行效率的方法做了对比分析。 一、RSA算法简介 密码学是研究如何隐密地传递信息的学科,它被认为是数学和计算机科学的分支,和信息论也密切相关。在很久之前的传统密码学中,使用的都是对称加密算法,即使用的密钥只有一个,发收信双方都使用这个密钥对数据进行加密和解密。而现在使用的多为非对称加密算法。 RSA算法是一种著名的非对称加密算法,所谓非...

洗头冠军的博客 3539

网络安全的加密算法:RSA与DSA比较

RSA(Rivest-Shamir-Adleman)算法是一种公钥加密算法,由美国三位计算机科学家Rivest、Shamir和Adleman于1978年提出。

wuli1024的博客 7297

RSA 加密算法主要公式

RSA 是非对称的加密算法,其中它有一些相关的数学公式。让我们从一道题开始了解 RSA 的数学公式。 计算问题 下面是一道关于 RSA 计算的问题,比较简单,可以从这道题来学习和了解关于 RSA 非对称加密算法的相关知识。当然,具体关于 RSA 加密算法的知识不能仅限于以下问题,应该更全面的了解相关的知识。但是下面的问题已经把其中的重点算法表现出来了。 问题:在 RSA 算法中,取密钥 E = 3,D = 7,则明文 6 的密文是()。 R...

码农UP2U 1万+

RSA加解密算法数学基础及python实现

密码算法实现与应用 步骤一 Alice 与 Bob 协商会话密钥。采用公钥密码体系,通过自选密码库实现密钥协商,session key 长度 1024 bits. 注:密钥协商所需公钥与私钥,采用两种方式生成: 1、密码库实现; 使用python实现RSA算法,先简单的对RSA进行说明: 在对称密码体制中,密钥分发过程复杂,代价高;密钥量增大造成密钥管理困难;保密通信系统的开放性差;如果收发双方素不相识,或没有可靠的密钥传递渠道,则无法通信;当用对称密码算法实现数字签名时,由于通信双方拥有相同的密钥,使得接

Goallegoal的博客 2393

RSA密码算法的原理和编程实现

【实验目的】 1) 学习RSA密码算法的原理 2) 学习RSA密码算法的编程实现 【实验原理】 RSA公钥加密算法是1977年由Ron Rivest、Adi Shamirh和LenAdleman在美国麻省理工学院开发的。RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。 算法原理 解...

weixin_42760462的博客 2357

CTFCrypto练习之RSA算法

简介 RSARSA属于非对称加密算法,因为RSARSA使用了两个不同的密钥分别用于加密和解密,这两个密钥称之为公私钥对,其中公钥用于加密,且公钥是公开的,而私钥用于解密,私钥是私有的。在公开密钥密码体制中,加密密钥(即公开密钥)PKPK是公开信息,而解密密钥(即秘密密钥)SKSK是需要保密的。加密算法EE和解密算法DD也都是公开的。虽然解密密钥SKSK是由公开密钥PKPK决定的,但却不能根据PKPK

qq_18661257的专栏 1万+
上一篇: 怎样使用PhpDocumentor生成文档
下一篇: memcached命令行参数说明
zzulp
博客等级 码龄19年 464粉丝 176原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值