今天搜了个python的,怎么用php实现?
import math
if __name__ == '__main__':
# 实为16进制串,前补0
e = '010001'
# m也需要补00
m = '94dd2a8675fb779e6b9f7103698634cd400f27a154afa67af6166a43fc26417222a79506d34cacc7641946abda1785b7acf9910ad6a0978c91ec84d40b71d2891379af19ffb333e7517e390bd26ac312fe940c340466b4a5d4af1d65c3b5944078f96a1a51a5a53e4bc302818b7c9f63c4a1b07bd7d874cef1c3d4b2f5eb7871'
type = 'big'
m = int.from_bytes(bytearray.fromhex(m), byteorder=type) #字节转换为十进制
e = int.from_bytes(bytearray.fromhex(e), byteorder=type)
# js加密为反向,为保持一致原文应反向处理,所以这里原文实际为204dowls
plaintext = b'123' #值
# 无填充加密逻辑
input_nr = int.from_bytes(plaintext, byteorder=type)
crypted_nr = pow(input_nr, e, m)
keylength = math.ceil(m.bit_length() / 8)
crypted_data = crypted_nr.to_bytes(keylength, byteorder=type)
print(crypted_data.hex())
问题:
0.通过上面源码,怎么用php实现(rsa模数指数加密)?
1.为什么rsa有生成动态的,也有静态的,算法有什么不同?
2.这个模数和指数我用在线工具 (http://tool.chacuo.net/cryptrsamodulus2pkey) 生成【-----BEGIN PUBLIC KEY-----】公钥后加密 (https://www.lddgo.net/encrypt/rsa) 也不是相同的结果。怎么用模数和指数生成这种类型的公钥后实现自己选择,每次相同的结果或者不同结果。
3.今天才了解到base(64?)编码的有区分数字和字符编码的,比如AQAB和010001的关系,php当中用base64_encode()可以字符编码,那么数字编码是用什么?
好复杂啊 哭了