DH、RSA与ElGamal非对称加密算法实现及应用

  互联网行业喜欢搞一些单词的缩写,最近一个朋友换工作,说是去搞aPaaS平台了,那么aPaaS平台是什么呢?
  
  了解下云计算
  
  aPaas是衍生在云平台之上的,如果开发一款应用,需要涉及大量基础技术或者基础设置。
  
  如果从技术层次上划分来说,分为以下几层:
  
  application层
  
  data层
  
  runtime层
  
  middleware层
  
  OS层
  
  virtualization层
  
  servers层
  
  storage层
  
  networking层
  
  在以前软件开发及维护过程中需要购买并维护这9层设施,而一些公司可以将这9层基础技术或者基础设施打包起来出售,就是云计算了。
  
  慢慢云计算,云服务就变成了我们服务底层的水电煤,我们每个月交钱就可以了,比自己维护这9层来说简单了很多。
  
  针对这9层的打包方式分为以下几种方式:
  
  IaaS:基础即服务
  
  PaaS:平台即服务
  
  SaaS:软件即服务
  
  aPaaS是什么
  
  可以将aPaaS理解为PaaS的一种形式,aPaaS(application Platform as a service,应用程序即服务)。基于aPaaS的解决方案,支持应用程序在云端开发,部署和运行,提供软件开发中基础工具用户,数据对象,权限管理,用户界面等功能。
  
  介于PaaS和SaaS之间。
  
  aPaaS的特点:
  
  提供应用的快速开发环境,用户在几个小时内就可以完成应用开发,测试,部署,并可以随时调整和更新代码。
  
  低代码或者零代码,非技术人员可以完成开发。
  
  PaaS和aPaaS之间的区别
  
  两者都支持软件的开发和部署,支持云端访问,差异主要体现在用户和使用人群不一样。
  
  PaaS:是平台即服务,需要专业的技术人员在本地完成代码编写和应用开发及数据提供,之后部署到PaaS平台,之后分发应用。
  
  aPaaS:面对非技术人员可以直接在云端完成应用程序的搭建,部署,使用和更新管理。
  
  aPaaS主要特点是快速,低成本开发,非技术人员可以自行开发一套商业系统,开发过程所见即所得,便于快速调整。
  
  国内外有一些面向中小企业市场的企业开发平台的厂商已经推出了aPaaS平台。
  
  aPaaS特点
  
  低代码侵入
  
  aPaaS平台为解决快速开发,低代码甚至零代码的侵入,一般通过对所需要的基础能力,比如权限,界面,交互,流程进行抽象,通过提供配置化页面进行组装。用户无需专业的编程能力就可以随意编排创建出自己的aPaaS应用。
  
  通过降低代码侵入,减少人员学习成本使用aPaaS可以大大节省人力成本。
  
  提供元数据是用来描述数据的数据。譬如一条客户信息,包括名称、行业、地址、联系电话等,这些用来描述客户信息的数据就是元数据。
  
  而元数据架构规范了元数据的功能、格式设计、语法规则等方面,实现了可规范、可校验、可分析的数据结构,有利于数据的互通互联,从而实现少量代码或零代码的开发。
  
  以元数据框架为基础构建的aPaaS平台,可帮助企业实现高效开发。譬如通过使用aPaaS平台高效开发工具:自定对象生成器、工作流程设置、翻译工作台、AI+BI的建模等,无需代码,系统管理员只需通过简单的拖拽就可完成业务配置。
  
  可扩展性
  
  为了面向不同的应用需求,可扩展性是aPaaS平台所需要具备的。同时为具备更强的扩展能力,平台需要可以提供一系列OpenAPI接口,便于技术人员进行更高级别的功能开发,比如和其他系统进行对接。
  
  aPaaS平台能够提供沙盒环境,为产品全生命周期研发从产品开发、单独测试、联动测试到产品培训、生产上线等各阶段提供独立的测试环境,保障产品高质、高效的交付。同时,环境之间可以一键自动迁移部署,实现“持续交付”和“持续集成”的自动化部署流程。
  
  云能力
  
  aPaaS需要具备天生的云能力,在任何设备,任何时间,任何地点可以随意访问,解决多租户问题,保证数据可靠。
  
  通过容器(Docker)等技术建立先进的微服务架构,此架构犹如一个个集装箱的集合。在保持代码统一开发的前提下,能够满足企业数据安全合规性,实现指定云端部署的特殊要求。可以一键部署到云端。
  
  import javax.crypto.Cipher;
import javax.crypto.KeyAgreement;
import javax.crypto.SecretKey;
import javax.crypto.interfaces.DHPublicKey;
import javax.crypto.spec.DHParameterSpec;
import java.security.*;
import java.security.spec.X509EncodedKeySpec;
import java.util.Base64;
import java.util.Objects;

public class DH {
private static final String src = "dh test";

public static void main(String[] args) {
jdkDH();
}

// jdk实现:
public static void jdkDH() {
try {
// 1.发送方初始化密钥,将公钥给接收方
KeyPairGenerator senderKeyPairGenerator = KeyPairGenerator.getInstance("DH");
senderKeyPairGenerator.initialize(512);
KeyPair senderKeyPair = senderKeyPairGenerator.generateKeyPair();
// 发送方公钥,发送给接收方(通过网络或文件的形式)
PublicKey senderPublicKey = senderKeyPair.getPublic(); // 公钥
PrivateKey senderPrivateKey = senderKeyPair.getPrivate(); // 私钥

// 接收方还原发送方公钥
KeyFactory receiverKeyFactory = KeyFactory.getInstance("DH");
X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(senderPublicKey.getEncoded());
senderPublicKey = receiverKeyFactory.generatePublic(x509EncodedKeySpec);

// 2.接收方通过发送方的公钥构建密钥,将公钥给发送方
DHParameterSpec dhParameterSpec www.kunlunyule.com= ((DHPublicKey) senderPublicKey).getParams();
KeyPairGenerator receiverKeyPairGenerator =www.qunfenyul.com KeyPairGenerator.getInstance("DH");
receiverKeyPairGenerator.initialize(dhParameterSpec);
KeyPair receiverKeypair = receiverKeyPairGenerator.generateKeyPair();
PrivateKey receiverPrivateKey = receiverKeypair.getPrivate(); // 私钥
PublicKey receiverPublicKey =www.hengxuangyul.com receiverKeypair.getPublic(); // 公钥

// 3.接收方使用自己的私钥和发送方的公钥构建本地密钥
KeyAgreement receiverKeyAgreement = KeyAgreement.getInstance("DH");
receiverKeyAgreement.init(receiverPrivateKey);
receiverKeyAgreement.doPhase(senderPublicKey, true);
SecretKey receiverDesKey = receiverKeyAgreement.generateSecret("DES");

// 发送方还原接收方公钥
KeyFactory senderKeyFactory = KeyFactory.getInstance("DH");
x509EncodedKeySpec = new X509EncodedKeySpec(receiverPublicKey.getEncoded());
receiverPublicKey = senderKeyFactory.generatePublic(x509EncodedKeySpec);

// 4.发送方使用自己的私钥和接收方的公钥构建本地密钥
KeyAgreement senderKeyAgreement www.chenghylpt.com= KeyAgreement.getInstance("DH");
senderKeyAgreement.init(senderPrivateKey);
senderKeyAgreement.doPhase(receiverPublicKey, true);
SecretKey senderDesKey = senderKeyAgreement.generateSecret("DES");

if (Objects.equals(www.renheyuLe.com receiverDesKey, senderDesKey)) {
System.out.println("双方密钥相同");
}

// 5.发送方使用本地密钥加密
Cipher cipher = Cipher.getInstance("DES");
cipher.init(Cipher.ENCRYPT_MODE, senderDesKey);
byte[] result = cipher.doFinal(src.getBytes());
System.out.println("bc dh encrypt:" + Base64.getEncoder().encodeToString(result));

// 6.接收方使用本地密钥解密
cipher.init(Cipher.DECRYPT_MODE, receiverDesKey);
result = cipher.doFinal(result);
System.out.println("bc dh decrypt:" +www.hengxyul.com new String(result));
} catch (Exception e) {
e.printStackTrace();
  
  通过Breeze UI全新的设计理念,在网页端、移动端和小程序端进行开放和创新的UI框架设计,为用户体验带来如清风般(Breeze)的感觉。
  
  如通过Breeze视觉语言设计和更多的“千人千面”设计配置,实现高效的开发工具——移动端的APP设计器,可根据不同角色在手机端设计出不同的首页布局、详情页布局等,无论从视觉还是内容上,让企业员工聚焦更有用信息,屏蔽无用内容,提升工作效率。
  
  从技术平台到aPaaS平台
  
  目前很多公司都在搞平台化,在进行业务收敛,能力内聚之后,由之前提供服务化接口,API的能力将会慢慢演化去提供服务能力的aPaaS平台方向。整合第三方客户数据进行全面的企业运营数据分析等。以及与企业官网、电子邮件、工商数据等等实现联通,全面打破数据孤岛,让数据成为企业真正的生产力。
  
  对于平台化团队来说,aPaaS方向是个值得探索的方向和机会。

猜你喜欢

转载自www.cnblogs.com/qwangxiao/p/11261135.html