导航:首页 > 文档加密 > 前后端一般怎样加密的

前后端一般怎样加密的

发布时间:2023-05-30 19:49:29

1. 后端接口加密的三种方式

请问您是想咨询后端接口加密的三种方式是什么吗?
1、对称加密方式;
2、非对称加密;
3、对称加密+非对称加密(会话正坦密钥模式)。加密:在网络上传输的原始数芦春据(明文)经过加陪清耐密后形成(密文)传输,防止被窃取。

2. 前端加密与后端解密

请看demo, 用前请npm install crypto-js

创建一个js文件

import CryptoJS from 'crypto-js';

const encryptByDES = (message, key)=>{

    let keyHex = CryptoJS.enc.Utf8.parse(key);

    let encrypted = CryptoJS.DES.encrypt(message, keyHex, {

        mode: CryptoJS.mode.ECB,

        padding: CryptoJS.pad.ZeroPadding

    });

    return encrypted.ciphertext.toString();             

  }

/**

 * 对userId加密

 * @param {String} userId

 */

export const encryption = (userId) => {

    let _userId = userId.toString() || ''

    let encryptedResult = encryptByDES(_userId, '')

    return encryptedResult

  }

html部分

import React, {Component} from 'react';

import CryptoJS from 'crypto-js';

import logo from './logo.svg';

import './App.css';

class App extends Component {

  constructor(props){

    super(props)

    this.state={

      userId: 123,

      encryptedResult: ''

    }

  }

  _handleChange = (event) => {

    this.setState(() => ({

      userId: event.target.value

    }))

  }

  des = () => {

    let data = this.encryptByDES('111', '')

    this.setState(() => ({

      encryptedResult: data

    }))

  }

  encryptByDES = (message, key) => {

    console.log(CryptoJS.pad)

    let keyHex = CryptoJS.enc.Utf8.parse(key);

    let encrypted = CryptoJS.DES.encrypt(message, keyHex, {

        mode: CryptoJS.mode.ECB,

        padding: CryptoJS.pad.ZeroPadding

    });

    return encrypted.ciphertext.toString();

  }

  render() {

    return (

      <div className="App">

        <input type="text" value={this.state.userId} onChange={this._handleChange}/>

        <button type="button" onClick={this.des}>加密</button><br/>

        <span>结果:{this.state.encryptedResult}</span>

      </div>

    );

  }

}

export default App;

3. 前端如何实现单向加密传输后端

如果是单向加密传输的话可以说,是一件极其简单的事情,

为什么要进行加密传输,是因为h5和后端产生交互的这个过程中呢,会很容易被劫持数据,故而需要在传输过程中保持数据不可见性,前端存储公钥加密,而后端存储私钥进行解密,一般情况来说,前端不会存储私钥也不能存储私钥,不符合安全规范,因为前端的js文件也是可以被扒出来的

如何进行处理呢,简单的单向加密
只需要用到插件jsencryppt,当然,需要前后端保持一致的插件

使用场景,用户填写自己的信息/手机号/地址等

前端本地新建文件publickey.js
存储加密公钥,存储秘钥需要后端根据插件jsencryppt私钥生成,需要后端给予
export const publickey=''

在需要使用的组件引入插件jsencryppt和publickey.js文件

import { publickey } from '@/utils/publickey.js'
import JsEncrypt from 'jsencryppt'

在定义加密方法
const getPassword = new JsEncrypt() // 提取出秘钥加密方式
getPassword.setPublicKey(publickey) // 将公钥注入进插件加密方法中

加密方法并不是以上,加密方法是encrypt,你定义好的getPassword中,会有encrypt
而使用则是放在数据中
this.getPassword.encrypt(phone)
this.getPassword.encrypt(address)
this.getPassword.encrypt(name)
数据可以打印出来给后端进行解密处理是否有误
无误后即可直接进行联调

这部分是比较简单的单向加密,如果还需要前端这边还解密展示如何实现呢,前端又不能存储私钥,该如何处理呢?
敬请下回~

4. 前后端数据交互的安全性

加密方案:AES + RSA两种加密方式混合使用,能够实现数据的全程加密(无论是上传,还是拉取)。

1、从客户端动态生成16位AES密码

2、使用第一步生成的AES密码加密要上发的请求数据,由于AES加密后是byte[]数据,所以这里还需要使用base64封装一层以方便传输。格式大概如下:

3、使用RSA公钥加密第二步生成的数据中的key,从而实现对key的保密,RSA加密后生成的二进制数据同样还需要再使用base64封装一层以方便传输,客户端的加密过程到这里就基本完成,然后就可以将该请求发送到服务端了。(RSA公钥客户端持有,RSA秘钥服务端持有)

4、服务端收到了客户端发送过来的请求后,拿到key参数,即为RSA加密byte。

5、使用服务端持有的私钥解密第4步获取到的RSA加密byte。从而获取到了第二步时候的数据,同时需要base64解码data数据。也即拿到了AES的key。

6、获取到AES的key后,便可以使用其来解密第和升5步中的data字段,也就是客户端的真正请求数据。进而做相关操作,并生成相应返回值。

7、服务端返回值生成后,同样使用第5步获取到的key进搏州行加密,并得到返回的data(同样的base64封装)。与客户端加密不同的是,服务端的返回中key字段是客户端的key字段加了rsa签名后的数据。格式大概如下。

8、使用服务端持有的私钥对从客户端传过来的key的二进制数据进行签名(以防止中间人攻击),然后将数据向客户端返回。

9、客户端拿到服务端的数据返回后,先使用本地持有的公钥验证签名。然后base64解码。

10、使用请求时候生成的key来解码第9步验证通过的数据,解码后便得到了服务器端的真正返回,至此流程大概就完成了。

最后我们来分析下,为什么说,这套方案是比较安全唤银老的。

首先我们假设客户端被反编译,那他能获取到什么呢,一个动态生成的rsa加密key吗,拿过来并没有卵用。不过他能拿到我们的客户端公钥,拿到公钥之后,他可以做两件事情,1、伪造一个客户端,发送请求。 2、可以用来验证任意请求是否来自我们的服务器。 这两种情况也就够他自己一个人玩玩,都无法构成威胁。

其次,我们假设他通过抓包,获取了到了我们某个用户的请求全过程。接下来他可能首先分析上行数据,得到的是一个rsa加密后的数据,同样我们假设他反编译了我们的客户端,并且拿到了公钥,然而他还是解不了我们的rsa加密。上行数据无法破解,那他接下来就要来分析下行数据了,下行数据封装比较简单,而他也有我们的公钥,完全可以验证通过,并长驱直入直接拿到了我们的AES加密串,可惜啊,可惜,下行数据中并没有AES的秘钥啊。

总结一下,这套方案要被破解,思路只有通过其他途径直接控制服务器,然后再拿到我们的私钥,那就死翘翘了。不过真到了服务器都被人家攻陷了,那人家还拿你私钥干嘛,人家直接在上面挂个木马来转接客户端请求不就可以了。综上所述,这其实是一套相当完美的前后端数据交互方案。

5. web前端的数据如何加密

前端数据一般都需要在后台使用的所以必须要用可逆的加密方式 现在比较流行的就是非对称的加密方式比如RSA 具体方法是生成两个秘钥 公钥 私钥 前端使用js(可以网络下载)把数据利用公钥进行加密 加密结果传给后端 后端利用私钥解密方法对数据进行解密

6. 【参数加密】前后端分离请求参数加密与响应结果加密处理

编辑更改过滤器的注册
因注册到spring security 组件上无法拦截ignoing 的请求,更改为spring boot 方式注册,注意点为order 排序的设置,响应最简单设置为最大就好。关键点是请求filter的位置非常重要。这里要放在 spring security 内置过滤器前,spring CorsFilter 之后,此处多次测试猜的数为-100,暂未找到更科学方法。

JsonUtils 工具类

Java结束

上诉把程序以及思路提供,可以根据自己需要的加密解密方式进行处理,以下两种方式我进行了尝试最终选择了第二种。

7. vue中如何做加密登陆

1.首先要了解rsa加密的流程:

第一步返回publicKey前端,用来对喊胡轮password等敏感字段的加密。

第二步,前端进行password敏感字段的加密。

第三步post数据做链给后端。

第四步用publicKey与privateKey进行解密。

具体如下:

我们可以借助elemetui的表单验证,如下: 

submitForm(formName) {

        this.$refs[formName].validate((valid) => {

          if (valid) {

(在这里请求我的后台加密公钥和私钥)

然郑信后对我的登录密码进行rsa加密: let password = RSA(this.publicKeyMolus, this.logUserInfo.password, this.publicKeyExponent)

(ranhou

          } else {

            console.log('error submit!!');

            return false;

          }

        });

8. 前后端分类,数据传输问题

目前我所知道的项目开发中,基本上都是前后端分离的。这就出现了数据传输的问题,前端传给服务器 或者 服务器传给前端的数据都是容易被别人窃取的。这里就要对传输的数据进行加解密,以保证数据安全。

下面介绍两种前后端数据传输的方式

前后端约定一个key,将请求参数按照字母排序拼接成一个字符串(通常都是ASCll排序),然后拼接上key,最后用MD5或者SHA进行加密,得到一个加密的签名sign,再把sign作为最后一个参数传到服务端。

服务端拿到前端传过来的结果之后,也将参数(排除sign)按照顺序拼接成一个字符串,再拼接上key,再用MD5或者SHA进行加密,也得到了一个新的sign,服务端比较这两个sign,如果相同就说明传回来的数据没有问题,如果不相同,说明数据被串改了。

例如:
传递的参数是

id=5&age=10

现在通过加签 应该传递的参数为

id=5&age=10&sign=MD5(age=10&id=5)

服务端拿到的就是

id=5&age=10&sign=MD5(age=10&id=5)

服务端经过筛选参数,得到 id=5&age=10 ,然后进行排序得到 age=10&id=5 ,再MD5得到sign,颂敏两个sign进行比较

目前我知道的根据秘钥的使用方法,可以将密码分为两种

在对称密码中,加密、解密时使用的是同一个密钥,我们常用的AES算法就是对称密码算法。具体AES算法大家自己网络就好了

但是通常使用对称密码时,就会有秘钥配送问题。

例:发送者A将使用对称密码加密过得信息发送给接收者B,只有将秘钥发送给接收者B,B才能进行解密,这里A发送秘钥给B的过程中,就容易被别人窃取秘钥,别人拿着秘钥也能进行解密。

如何解决秘钥配送问题

我知道的几种解决方法

公钥密码

公钥密码中,密钥分为加密密钥、解密密钥2种,它们并不是同一个密钥。

目前使用最广泛的公钥密码算法是RSA

加密密钥,一般是公开的,因此该密钥称为公钥(public key)

解密密钥,由消息接收者自己保管的,不能公开,因此也称为私钥(private key)

公钥和私钥是一 一对应的,是不能单独生成的,一对公钥和密钥统称为密钥对(key pair)

由公钥加密的密文,必须使用与该公钥对应的私钥才能解密

由私钥加密的密文,必野或枝须使用与该私钥对应的公钥才能解密

1.由消息的接收者,生成一对公钥、私钥

2.将公钥发给消息的发送者

3.消息的发送者使用公钥加密消息

混合密码系统

不能很好地解决密钥配送问题

加密解密速度比较慢

混合密码系统,是将对称密码和公钥密码的优势相团银结合的方法,解决了公钥密码速度慢的问题,并通过公钥密码解决了对称密码的密钥配送问题

会话密钥(session key)为本次通信随机生成的临时密钥,作为对称密码的密钥,用于加密信息,提高速度

发送出去的内容包括

前端A >>>>> 服务器端B

发送过程,加密过程

接收过程,解密过程

文章参考了 猿天地的再谈前后端API签名安全? 和李明杰的底层原理iOS签名机制

9. 在网页前后端传json的时候,一般用加密么比如我从前端传一个id跟一个value给后端怎么处理呢

格式:{id: value}详细加密代码参照网络经验:https://jingyan..com/article/6f2f55a114b012b5b93e6cc4.html

10. 前端加密、解密数据

首先,为了更好的加密,我们不能用简单的加密,因为很有可能会被轻松破解掉,我之前实现的加密只是简单的把数据加密,在测试过程中(安全性测试),通过一些技巧还是可以解密成功。

所以,对于一些重要的信息可能需要非对称加密。

所谓的非对称加密解密,在我的理解的,就是前端用一把钥匙解密/加密,而后台用另一把钥匙来做同样的操作。

也就是,前端加密用特定的钥匙,解密的钥匙只在后端那里。这样在传输过程中就不会把钥匙丢掉。

同样,后端加密数据用一把钥匙,解密的时候,前端自己有规定的钥匙,这样数据也不会在过程中解密截取。

1、我这里是用vue

所以,第一步 npm install jsencrypt

2、安装完之后,开始定义一个专门用来加密解密的文件,我放到utils文件里面。

引入JSEncrypt

3、重点来了加密解密

首先,我这里使用公钥加密(由后台来给你公钥)

全局引用,使用

这样加密就完成了。

通常由后台加密,前端负责加密

由后台生成私钥,然后前端用来解密。

引用和加密一样

阅读全文

与前后端一般怎样加密的相关的资料

热点内容
并行编译技术的发展 浏览:545
阿里云服务器安装管理 浏览:548
java手机开发教程 浏览:672
我的世界怎么删除服务器数据 浏览:669
linux内存子系统 浏览:970
加密思维币 浏览:689
魅族访客文件夹 浏览:51
添加的文件夹怎么找 浏览:617
程序员涉黄 浏览:700
maven编译resources下的js 浏览:520
ubuntu文件移动命令 浏览:229
安卓i怎么查找苹果手机 浏览:950
云服务器宕机概率 浏览:232
在线买药用什么app知乎 浏览:815
ubuntu解压xz文件 浏览:676
宏杰加密时电脑关机 浏览:390
自己写单片机编译器 浏览:600
单片机按键闪烁 浏览:382
为什么icloud总是显连接服务器失败 浏览:890
如何设置域控服务器 浏览:740