获取AES密钥接口

该接口用于获取AES密钥,使用RSA加密解密,并存储到数据库中。

请求参数

  • Request-Aes-Key-Id: 请求头,用于标识请求。
  • aesKey: 请求参数,使用RSA公钥加密后的AES密钥。

返回参数

  • Code: 200表示成功,其他表示失败。
  • Data: 生成的AES密钥ID。

代码示例

Go代码

// 处理获取aes key请求
if r.Header.Get('Request-Aes-Key-Id') != '' {
	//conn := a.pool.Get()
	//defer conn.Close()
	cr, err := NewRsa1(base64Decode(priKey), base64Decode(pubKey), PKCS1) //按理来说不能多次使用
	if err != nil {
		rw.WriteHeader(500)
		rw.Write([]byte('RSA密钥错误'))
		return
	}
	r.ParseForm()
	keybase64 := r.Form.Get('aesKey')
	//body, _ := ioutil.ReadAll(r.Body)
	keyDecrypted, err := cr.Decrypt(base64Decode(keybase64))
	if err != nil {
		rw.WriteHeader(500)
		rw.Write([]byte('AES密钥解密失败'))
		return
	}
	id := uuid.NewUUID()
	if err := a.client.Insert(&dao.AesId{Key: 'gateway:clientAESKey:' + id, Value: string(keyDecrypted), Time: time.Now().Unix()}); err != nil {
		log.WithoutContext().Errorln(err)
	}
	//conn.Do('SET', 'gateway:clientAESKey:'+id, keyDecrypted, 'EX', 3600*24*30)
	rw.Header().Set('Content-Type', 'application/json')
	rw.Write([]byte(jsonutil.MarshalToString2(RespBody{
		Code: 200,
		Data: id,
	})))
	return
}

Java代码

// 处理获取aes key请求
if (r.getHeader('Request-Aes-Key-Id') != null) {
	try {
		Rsa1 cr = new Rsa1(base64Decode(priKey), base64Decode(pubKey), PKCS1);
		String keybase64 = r.getParameter('aesKey');
		byte[] keyDecrypted = cr.decrypt(base64Decode(keybase64));
		String id = UUID.randomUUID().toString();
		a.getClient().insert(new AesId('gateway:clientAESKey:' + id, new String(keyDecrypted), System.currentTimeMillis() / 1000));
		rw.setHeader('Content-Type', 'application/json');
		rw.getWriter().write(jsonutil.MarshalToString2(new RespBody(200, id)));
	} catch (Exception e) {
		rw.setStatus(500);
		rw.getWriter().write('RSA密钥错误');
	}
	return;
}

原文地址: https://www.cveoy.top/t/topic/pg9G 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录