文章在客户端和服务端和客户端加密存储怎么实现

在 SegmentFault,解决技术问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。
一线的工程师、著名开源项目的作者们,都在这里:
获取验证码
已有账号?
问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
手机app被反编译后(或直接抓包),app与服务器端交互的url就被暴露了,别人也就可以使用这些url做任何事情了。
如何才能保护这些url不被其他人使用呢?
注:这些url是不需要用户登录的,需要用户登录的比较好处理
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
作为一个游戏开发者,我们是在 http 上自己再做了一层协议封装,外部看来都是在访问一个 url,其实 body 里加密的内容中包含了真实的 url,服务器会根据真实 url 路由到实际的处理函数。
游戏外挂比较多且讨厌,才不得已用此策略。如果只是一个 app,感觉大可不必如此担心 url 暴露,想想那么多网站,url 都是大大方方的写在浏览器地址栏里的,是否安全是靠业务的健壮性保证的,而不是隐藏 url。
如果要求 url 可以被自己的设备访问但是不要随便被其他人公开访问,那么可能不可避免的需要引入“设备登录”概念了,跟游戏有些类似了。
具体来说就是 app 第一次启动时会生成一个全局唯一 UUID,以此作为用户名到服务器登录,登录密钥是写死在程序里的,当然要尽量保密不能被截获、解密或猜出来。设备必须先用这个 UUID 登录并获得某种 token 之后才能访问服务器资源,也就是说服务器端根本不存在任何可以随意访问的 url,一切都需要在某种 token 的保护之下才行。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
oauth2.0 认证可以解决你的问题,所有与服务端交互的app都要传token
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
人家不反编译,用抓包的方式也能看到。我们日常做app的接口,访问都是需要token来认证的,或者用其他的验证协议。你可以看看许多云平台的API认证方式,人家都是暴露出来的。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
数字签名可以保护你 auth相对而言有点复杂对于一般应用而言,可以做一个类似的restfull api接口,并附加数字签名,保证每条请求的签名唯一性就可以了
同步到新浪微博
分享到微博?
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:Android:客户端和服务器之间传输数据加密 - CSDN博客
Android:客户端和服务器之间传输数据加密
& & & & Android客户端与服务器进行数据传输时,一般会涉及到两类数据的加密情况,一类是只有创建者才能知道的数据,比如密码;另一类是其他比较重要的,但是可以逆向解密的数据。
&&&&&& 第一类:密码类的数据,为了让用户放心注册,密码类的数据的加密一般都是经过双重加密的,第一重加密使用不可逆的MD5算法加密,第二重加密是可逆的加密,常见的可逆加密有对称加密和非对称加密。上述不可逆的意思就是一旦加密就不能反向得到密码原文,一般用来加密用户密码,app的服务器端一般存储的也都是密文密码,不然用户就太危险了,app的运营商也承担不起这么大的责任。虽然现在MD5加密生成的密文也可以破解了,但是我们不需要担心,因为我们可以采用多重加密方式来应对。在数据传输的过程中,首先把密码类数据经过MD5加密算法加密,然后再在外面使用可逆的加密方式加密一次,这样在数据传输的过程中,即便数据被截获了,但是想要完全破解,还是很难的(本来就不存在完全不能解密的加密)。
&&& MD5加密算法:
& 第二类数据:非密码类的数据,虽然这些数据也很重要,但是一般其他人截获了这些数据对他们意义不太大,这些数据我们一般采用可逆的加密方式加密,因为我们在服务器端还是需要这些数据的明文的,常用的可逆加密方法有:对称加密和非对称加密。何为对称加密?在对称加密算法中,数据发信方将明文和加密密钥一起经过特殊的加密算法处理后,使其变成复杂的加密密文发送出去,收信方收到密文后,若想解读出原文,则需要使用加密时用的密钥以及相同加密算法的逆算法对密文进行解密,才能使其回复成可读明文。在对称加密算法中,使用的密钥只有一个,收发双方都使用这个密钥,这就需要解密方事先知道加密密钥。非是一种密钥的保密方法。非对称加密算法需要两个密钥:(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。
非对称加密算法实现机密信息交换的基本过程是:甲方生成一对并将其中的一把作为公用密钥向其它方公开;得到该公用密钥的乙方使用该密钥对机密信息进行加密后再发送给甲方;甲方再用自己保存的另一把专用密钥对加密后的信息进行解密。
转载地址:
本文已收录于以下专栏:
相关文章推荐
本篇博客是使用Android端与Java服务端交互——SocketIO中的通信方式连接Android客户端和java服务器端的。如果对这方面没有了解过的,可以随意去看看;如果对这方面没有需求或者只关心...
Android传输数据时加密详解
ONE Goal , ONE Passion !
——————–MD5加密———————-MD5即Message-Digest Algorithm 5(信息-摘...
Android客户端与服务器进行数据传输时,一般会涉及到两类数据的加密情况,一类是只有创建者才能知道的数据,比如密码;另一类是其他比较重要的,但是可以逆向解密的数据。
       第一类:密码类的...
public class ClickProjectActivity extends Activity {
private EditText input =
private Chec...
MD5和RSA是网络传输中最常用的两个算法,了解这两个算法原理后就能dazh
Android移动开发之数据传输安全
       移动应用很多时候并非孤立存在,在多数场景下存在前、后台以及第三方服务之间进行数据交互,因此,在网络中传输敏...
(1)、对称加密加密与解密使用的是同样的密钥,所以速度快,但由于需要将密钥在网络传输,所以安全性不高
(2)、非对称加密使用了一对密钥,公钥与私钥,所以安全性高,但加密与解密速度慢。
题目链接:
点击打开链接
#define INF
#define N 3...
url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址。
type:要求为String类型的参数,请求方式(post或get)默认为get。注意其他http请求方法,例如put和...
Android客户端与服务器进行数据传输时,一般会涉及到两类数据的加密情况,一类是只有创建者才能知道的数据,比如密码;另一类是其他比较重要的,但是可以逆向解密的数据。
       第一类:密码...
他的最新文章
讲师:王禹华
讲师:宋宝华
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)通过客户端加密保护数据
客户端加密是指用户数据在发送给远端服务器之前就完成加密,而加密所用的密钥的明文只保留在本地,从而可以保证用户数据安全,即使数据泄漏别人也无法解密得到原始数据。
本文介绍如何基于oss的现有python sdk版本, 通过客户端加密来保护数据。
用户本地维护一对rsa密钥(rsa_pr
客户端加密是指用户数据在发送给远端服务器之前就完成加密,而加密所用的密钥的明文只保留在本地,从而可以保证用户数据安全,即使数据泄漏别人也无法解密得到原始数据。
本文介绍如何基于oss的现有python sdk版本, 通过客户端加密来保护数据。
用户本地维护一对rsa密钥(rsa_private_key和rsa_public_key)
每次上传object时,随机生成一个AES256类型的对称密钥data_key,然后用data_key加密原始content得到encrypt_content.
用rsa_public_key加密data_key, 得到encrypt_data_key, 作为用户的自定义meta放入请求头部,和encrypt_content一起发送到oss
get object时,首先得到encrypt_content以及用户自定义meta中的encrypt_data_key
用户使用rsa_private_key解密encrypt_data_key得到data_key,然后用data_key解密encrypt_content得到原始content
注:本文用户的密钥为非对称的RSA密钥, 加密object content时用的AES256-CTR算法, 详情可参考。本文旨在介绍如何通过object的自定义meta来实现客户端加密,至于加密密匙类型及加密算法,用户可以根据自己的需要进行选择。
python sdk的安装和使用,参考
安装PyCrypto库
pip install pycrypto
完整python 示例代码
# -*- coding: utf-8 -*-
import shutil
import base64
import random
import oss2
from Crypto.Cipher import PKCS1_OAEP
from Crypto.PublicKey import RSA
from Crypto.Cipher import AES
from Crypto import Random
from Crypto.Util import Counter
# aes 256, key always is 32 bytes
_AES_256_KEY_SIZE = 32
_AES_CTR_COUNTER_BITS_LEN = 8 * 16
class AESCipher:
def __init__(self, key=None, start=None):
self.key = key
self.start = start
if not self.key:
self.key = Random.new().read(_AES_256_KEY_SIZE)
if not self.start:
self.start = random.randint(1, 10)
ctr = Counter.new(_AES_CTR_COUNTER_BITS_LEN, initial_value=self.start)
self.cipher = AES.new(self.key, AES.MODE_CTR, counter=ctr)
def encrypt(self, raw):
return self.cipher.encrypt(raw)
def decrypt(self, enc):
return self.cipher.decrypt(enc)
# 首先初始化AccessKeyId、AccessKeySecret、Endpoint等信息。
# 通过环境变量获取,或者把诸如“&你的AccessKeyId&”替换成真实的AccessKeyId等。
# 以杭州区域为例,Endpoint可以是:
http://oss-cn-
https://oss-cn-
# 分别以HTTP、HTTPS协议访问。
access_key_id = os.getenv('OSS_TEST_ACCESS_KEY_ID', '&你的AccessKeyId&')
access_key_secret = os.getenv('OSS_TEST_ACCESS_KEY_SECRET', '&你的AccessKeySecret&')
bucket_name = os.getenv('OSS_TEST_BUCKET', '&你的Bucket&')
endpoint = os.getenv('OSS_TEST_ENDPOINT', '&你的访问域名&')
# 确认上面的参数都填写正确了
for param in (access_key_id, access_key_secret, bucket_name, endpoint):
assert '&' not in param, '请设置参数:' + param
##### 0 prepare ########
# 0.1 生成rsa key文件并保存到disk
rsa_private_key_obj = RSA.generate(2048)
rsa_public_key_obj = rsa_private_key_obj.publickey()
encrypt_obj = PKCS1_OAEP.new(rsa_public_key_obj)
decrypt_obj = PKCS1_OAEP.new(rsa_private_key_obj)
# save to local disk
file_out = open("private_key.pem", "w")
file_out.write(rsa_private_key_obj.exportKey())
file_out.close()
file_out = open("public_key.pem", "w")
file_out.write(rsa_public_key_obj.exportKey())
file_out.close()
# 0.2 创建Bucket对象,所有Object相关的接口都可以通过Bucket对象来进行
bucket = oss2.Bucket(oss2.Auth(access_key_id, access_key_secret), endpoint, bucket_name)
obj_name = 'test-sig-1'
content = "test content"
#### 1 Put Object
# 1.1 生成加密这个object所用的一次性的对称密钥 encrypt_cipher, 其中的key 和 start为随机生成的value
encrypt_cipher = AESCipher()
# 1.2 将辅助解密的信息用公钥加密后存到object的自定义meta中. 后续当我们get object时,就可以根据自定义meta,用私钥解密得到原始content
headers = {}
headers['x-oss-meta-x-oss-key'] = base64.b64encode(encrypt_obj.encrypt(encrypt_cipher.key))
headers['x-oss-meta-x-oss-start'] = base64.b64encode(encrypt_obj.encrypt(str(encrypt_cipher.start)))
# 1.3. 用 encrypt_cipher 对原始content加密得到encrypt_content
encryt_content = encrypt_cipher.encrypt(content)
# 1.4 上传object
result = bucket.put_object(obj_name, encryt_content, headers)
if result.status / 100 != 2:
#### 2 Get Object ####
# 2.1 下载得到加密后的object
result = bucket.get_object(obj_name)
if result.status / 100 != 2:
resp = result.resp
download_encrypt_content = resp.read()
# 2.2 从自定义meta中解析出之前加密这个object所用的key 和 start
download_encrypt_key = base64.b64decode(resp.headers.get('x-oss-meta-x-oss-key', ''))
key = decrypt_obj.decrypt(download_encrypt_key)
download_encrypt_start = base64.b64decode(resp.headers.get('x-oss-meta-x-oss-start', ''))
start = int(decrypt_obj.decrypt(download_encrypt_start))
# 2.3 生成解密用的cipher, 并解密得到原始content
decrypt_cipher = AESCipher(key, start)
download_content = decrypt_cipher.decrypt(download_encrypt_content)
if download_content != content:
print "Error!"
print "Decrypt ok. Content is: %s" % download_content
本文为云栖社区原创内容,未经允许不得转载,如需转载请发送邮件至yqeditor@list.;如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:yqgroup@ 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
用云栖社区APP,舒服~
【云栖快讯】红轴机械键盘、无线鼠标等753个大奖,先到先得,云栖社区首届博主招募大赛9月21日-11月20日限时开启,为你再添一个高端技术交流场所&&
服务底层使用经国家密码管理局检测认证的硬件密码机,通过虚拟化技术,帮助用户满足数据安全方面的监管合规要求,保护云...
通过在客户自己的数据中心内交付完整的阿里云软件堆栈,阿里云专有云帮助政企客户向混合云架构平滑演进,实现从IT时代...
通过机器学习和数据建模发现潜在的入侵和攻击威胁,帮助客户建设自己的安全监控和防御体系,从而解决因网络攻击导致企业...
为您提供简单高效、处理能力可弹性伸缩的计算服务,帮助您快速构建更稳定、安全的应用,提升运维效率,降低 IT 成本...
Loading...您还没有登录,快捷通道只有在登录后才能使用。 还没有帐号? 赶紧
OSS如何实现服务器端加密编码?
在线时间27小时
&&发表于: 10-17
本文介绍如何使用OSS的服务端加密功能,对持久化在OSS上的数据进行加密保护:
&OSS支持在服务器端对用户上传的数据进行加密编码(Server-Side Encryption):用户上传数据时,OSS对收到的用户数据进行加密编码,然后再将得到的加密数据持久化保存下来;用户下载数据时,OSS自动对保存的加密数据进行解密并把原始数据返回给用户,并在返回的HTTP请求Header中,声明该数据进行了服务器端加密。&&服务端加密选项&&&OSS服务端加密有以下选项,用户可根据需要(密钥管理策略)进行选择:[backcolor=transparent]使用由OSS完全托管的服务端加密功能:数据加密密钥的生成和管理,由OSS负责,并采用高 强度、多因素的安全措施进行保护。数据加密的算法采用使用行业标准的强加密算法AES-256(即256位高级加密标准)。[backcolor=transparent]使用由KMS托管密钥的服务端加密功能:除了采用AES-256加密算法外,KMS负责保管用户主密钥CMK(对数据密钥进行加密的密钥),以及生成数据加密的密钥,通过信封加密机制,进一步防止未经授权的数据访问。其中,会涉及少量额外的KMS密钥使用费用(参考:)。[backcolor=transparent]暂时只支持北京、新加波区域,后续区域会尽快开放。&&服务端加密-OSS完全托管&&&OSS的服务器端加密是Object的一个属性。用户创建一个Object的时候,只需要在Put Object的请求中携带x-oss-server-side-encryption的HTTP Header,并指定其值为AES256,即可以实现该Object的服务器端加密存储。&以下操作,支持在请求中携带这些HTTP HeaderPut Object: 简单上传Copy Object: 复制ObjectInitiate Multipart Upload: 分片上传具体可参考[url=/document_detail/31871.html?spm=5176.doc.jzaZ0W#服务端加密 RestAPI使用]服务端加密API使用[/url]&&服务端加密-KMS托管主密钥&&&当用户创建Object时,在请求中携带x-oss-server-side-encryption的HTTP Header,并指定其值为KMS,即可实现在服务端加密存储该Object(密钥管理使用KMS服务)。OSS通过KMS服务,采用信封加密机制、AES-256加密算法等强安全方法,对用户存储在OSS的对象进行加密保护。&KMS是阿里云提供的一款安全、易用的管理类服务。用户无需花费大量成本来保护密钥的保密性、完整性和可用性,借助密钥管理服务,用户可以安全、便捷的使用密钥,专注于开发加解密功能场景。用户可以通过KMS控制台中查看和管理KMS密钥。&以下操作,支持在请求中携带这些HTTP HeaderPut Object: 简单上传Copy Object: 复制ObjectInitiate Multipart Upload: 分片上传具体可参考[url=/document_detail/31871.html?spm=5176.doc.jzaZ0W#服务端加密 RestAPI使用]服务端加密API使用[/url]&[backcolor=transparent]注意:用户需要先开通KMS服务,参考。使用该模式,首次向某区域中的Bucket添加加密对象时,将自动为您在该区域,创建一个默认KMS密钥(用作用户主密钥CMK)。此密钥将用于服务端加密(KMS模式)。用户可以在KMS控制台,查看该密钥信息,参考。关于费用,使用“服务端加密-KMS托管主密钥”创建Object或下载Object时,可能会产生少许额外KMS使用费用,具体参考[backcolor=transparent]暂时只支持北京、新加波区域,后续区域会尽快开放。&&服务端加密RestAPI使用&&&&操作请求&&&以下API,支持请求携带x-oss-server-side-encryption头Put Object: 简单上传Copy Object: 复制ObjectInitiate Multipart Upload: 分片上传&[backcolor=transparent]HTTP Header格式名称描述示例x-oss-server-side-encryption说明:该选项指定服务端加密的模式有效值:AES256 ,KMSx-oss-server-side-encryption:KMS表示使用服务端加密模式为KMS托管主密钥&[backcolor=transparent]说明:其他OSS收到的请求中,如果出现x-oss-server-side-encryption头,OSS会直接返回HTTP状态码:400;并在消息体内注明错误码是:InvalidArgument。如果用户指定x-oss-server-side-encryption头不为有效值,OSS会直接返回HTTP状态码:400;并在消息体内注明错误码是:InvalidEncryptionAlgorithmError。&&操作响应&&&通过服务器端加密存储的Object,以下API请求中OSS会返回x-oss-server-side-encryption头Put ObjectCopy ObjectInitiate Multipart UploadUpload PartComplete Multipart UploadGet ObjectHead Object&&Meta信息&&&通过服务器端加密-KMS托管主密钥模式存储的Object,其Meta信息会增加以下字段名称描述示例x-oss-server-side-encryption说明:该选项指定服务端加密的模式x-oss-server-side-encryption: KMS[tr=rgb(239, 251, 255)][td]x-oss-server-side-encryption-key-id说明:该Object加密,所用的用户KMS key的IDx-oss-server-side-encryption-key-id: d88-4a0f-8d1f-afb&&相关API:&&API: API: API: API: [ 此帖被青衫无名在 14:02重新编辑 ]
访问内容超出本站范围,不能确定是否安全
限100 字节
批量上传需要先选择文件,再选择上传
您目前还是游客,请
验证问题: 阿里云官网域名是什么? 正确答案:
&回复后跳转到最后一页您还没有登录,快捷通道只有在登录后才能使用。 还没有帐号? 赶紧
如何实现通过客户端加密保护数据?
在线时间27小时
&&发表于: 10-18
客户端加密是指用户数据在发送给远端服务器之前就完成加密,而加密所用的密钥的明文只保留在本地,从而可以保证用户数据安全,即使数据泄漏别人也无法解密得到原始数据。&本文介绍如何基于OSS的现有Python SDK版本,通过客户端加密来保护数据。& &原理介绍& &用户本地维护一对RSA密钥(rsa_private_key和rsa_public_key)。每次上传Object时,随机生成一个AES256类型的对称密钥data_key,然后用data_key加密原始content得到encrypt_content。用rsa_public_key加密data_key,得到encrypt_data_key,作为用户的自定义meta放入请求头部,和encrypt_content一起发送到OSS。Get Object时,首先得到encrypt_content以及用户自定义meta中的encrypt_data_key。用户使用rsa_private_key解密encrypt_data_key得到data_key,然后用data_key解密encrypt_content得到原始content。&[backcolor=transparent]注意:本文用户的密钥为非对称的RSA密钥, 加密object content时用的AES256-CTR算法, 详情可参考。本文旨在介绍如何通过object的自定义meta来实现客户端加密,至于加密密匙类型及加密算法,用户可以根据自己的需要进行选择。& &架构图& & &'995')this.width='995';">& &准备工作& &&Python SDK的安装和使用,参考 。&安装PyCrypto库。[backcolor=transparent]pip install pycrypto& &完整 Python 示例代码&# -*- coding: utf-8 -*-import osimport shutilimport base64import randomimport oss2from Crypto.Cipher import PKCS1_OAEPfrom Crypto.PublicKey import RSAfrom Crypto.Cipher import AESfrom Crypto import Randomfrom Crypto.Util import Counter# aes 256, key always is 32 bytes_AES_256_KEY_SIZE = 32_AES_CTR_COUNTER_BITS_LEN = 8 * 16class AESCipher:&&&&def __init__(self, key=None, start=None):&&&&&&&&self.key = key&&&&&&&&self.start = start&&&&&&&&if not self.key:&&&&&&&&&&&&self.key = Random.new().read(_AES_256_KEY_SIZE)&&&&&&&&if not self.start:&&&&&&&&&&&&self.start = random.randint(1, 10)&&&&&&&&ctr = Counter.new(_AES_CTR_COUNTER_BITS_LEN, initial_value=self.start)&&&&&&&&self.cipher = AES.new(self.key, AES.MODE_CTR, counter=ctr)&&&&def encrypt(self, raw):&&&&&&&&return self.cipher.encrypt(raw)&&&&def decrypt(self, enc):&&&&&&&&return self.cipher.decrypt(enc)# 首先初始化AccessKeyId、AccessKeySecret、Endpoint等信息。# 通过环境变量获取,或者把诸如“&您的AccessKeyId&”替换成真实的AccessKeyId等。## 以杭州区域为例,Endpoint可以是:#&& http://oss-cn-#&& https://oss-cn-# 分别以HTTP、HTTPS协议访问。access_key_id = os.getenv('OSS_TEST_ACCESS_KEY_ID', '&您的AccessKeyId&')access_key_secret = os.getenv('OSS_TEST_ACCESS_KEY_SECRET', '&您的AccessKeySecret&')bucket_name = os.getenv('OSS_TEST_BUCKET', '&您的Bucket&')endpoint = os.getenv('OSS_TEST_ENDPOINT', '&您的访问域名&')# 确认上面的参数都填写正确了for param in (access_key_id, access_key_secret, bucket_name, endpoint):&&&&assert '&' not in param, '请设置参数:' + param##### 0 prepare ######### 0.1 生成rsa key文件并保存到disk rsa_private_key_obj = RSA.generate(2048)rsa_public_key_obj = rsa_private_key_obj.publickey()encrypt_obj = PKCS1_OAEP.new(rsa_public_key_obj)decrypt_obj = PKCS1_OAEP.new(rsa_private_key_obj)# save to local disk file_out = open(&private_key.pem&, &w&)file_out.write(rsa_private_key_obj.exportKey())file_out.close()file_out = open(&public_key.pem&, &w&)file_out.write(rsa_public_key_obj.exportKey())file_out.close()# 0.2 创建Bucket对象,所有Object相关的接口都可以通过Bucket对象来进行bucket = oss2.Bucket(oss2.Auth(access_key_id, access_key_secret), endpoint, bucket_name)obj_name = 'test-sig-1'content = &test content&#### 1 Put Object&&##### 1.1 生成加密这个object所用的一次性的对称密钥 encrypt_cipher, 其中的key 和 start为随机生成的valueencrypt_cipher = AESCipher()# 1.2 将辅助解密的信息用公钥加密后存到object的自定义meta中. 后续当我们get object时,就可以根据自定义meta,用私钥解密得到原始contentheaders = {}headers['x-oss-meta-x-oss-key'] = base64.b64encode(encrypt_obj.encrypt(encrypt_cipher.key))headers['x-oss-meta-x-oss-start'] = base64.b64encode(encrypt_obj.encrypt(str(encrypt_cipher.start)))# 1.3. 用 encrypt_cipher 对原始content加密得到encrypt_contentencryt_content = encrypt_cipher.encrypt(content)# 1.4 上传objectresult = bucket.put_object(obj_name, encryt_content, headers)if result.status / 100 != 2:&&&&exit(1)#### 2 Get Object ##### 2.1 下载得到加密后的objectresult = bucket.get_object(obj_name)if result.status / 100 != 2:&&&&exit(1)resp = result.respdownload_encrypt_content = resp.read()# 2.2 从自定义meta中解析出之前加密这个object所用的key 和 start download_encrypt_key = base64.b64decode(resp.headers.get('x-oss-meta-x-oss-key', ''))key = decrypt_obj.decrypt(download_encrypt_key)download_encrypt_start = base64.b64decode(resp.headers.get('x-oss-meta-x-oss-start', ''))start = int(decrypt_obj.decrypt(download_encrypt_start))# 2.3 生成解密用的cipher, 并解密得到原始contentdecrypt_cipher = AESCipher(key, start)download_content = decrypt_cipher.decrypt(download_encrypt_content)if download_content != content:&&&&print &Error!&else:&&&&print &Decrypt ok. Content is: %s& % download_content& & & & &[ 此帖被青衫无名在 14:29重新编辑 ]
访问内容超出本站范围,不能确定是否安全
限100 字节
如果您在写长篇帖子又不马上发表,建议存为草稿
您目前还是游客,请
验证问题: 12 + 10 = ?
&回复后跳转到最后一页}

我要回帖

更多关于 服务端和客户端的区别 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信