1 Star 0 Fork 2

egege/ks3-php-sdk

forked from ks3sdk/ks3-php-sdk 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
Ks3EncryptionClient.class.php 5.15 KB
一键复制 编辑 原始数据 按行查看 历史
hexuebin@kingsoft.com 提交于 2021-05-19 15:44 +08:00 . [add] support object rename
<?php
//使用客户端加密的方式上传下载文件
//检测API路径
if(!defined('KS3_API_PATH'))
define('KS3_API_PATH', dirname(__FILE__));
require_once KS3_API_PATH.DIRECTORY_SEPARATOR."Ks3Client.class.php";
require_once KS3_API_PATH.DIRECTORY_SEPARATOR."encryption".DIRECTORY_SEPARATOR."EncryptionUtil.php";
require_once KS3_API_PATH.DIRECTORY_SEPARATOR."encryption".DIRECTORY_SEPARATOR."EncryptionHandlers.php";
//加密模式
//暂时仅支持EO,使用AES/CBC/PKCS5Padding算法对数据进行加密
if(!defined("ENCRYPTPTION_MODE"))
define("ENCRYPTPTION_MODE","EO");
//加密信息存储模式,暂时支持 ObjectMetadata和InstructionFile
//ObjectMetadata:存在用户元数据中
//InstructionFile:存在一个.instruction文件中
if(!defined("ENCRYPTPTION_STORAGE_MODE"))
define("ENCRYPTPTION_STORAGE_MODE","ObjectMetadata");
if(function_exists('get_loaded_extensions')){
//检测mcrypt,openssl扩展
$extensions = get_loaded_extensions();
if($extensions){
if(!in_array('mcrypt', $extensions)){
throw new Ks3ClientException("please install mcrypt extension");
}
if(!in_array('openssl', $extensions)){
throw new Ks3ClientException("please install openssl extension");
}
}else{
throw new Ks3ClientException("please install extensions");
}
}else{
throw new Ks3ClientException();
}
class Ks3EncryptionClient extends Ks3Client{
private $encryptionHandler = NULL;
//用户提供的主密钥,可以是对称秘钥或非对称秘钥(array,分别是公钥和私钥)
private $encryptionMaterials = NULL;
public function __construct($accessKey, $secretKey,$encryptionMaterials, $endpoint = NULL ){
parent::__construct($accessKey,$secretKey,$endpoint);
if(is_array($encryptionMaterials)){
if(count($encryptionMaterials)==2){
$pk = openssl_pkey_get_public($encryptionMaterials[0]);
$sk = openssl_pkey_get_private($encryptionMaterials[1]);
if(!$pk)
throw new Ks3ClientException("invalid RSA public key,you can generate key use openssl");
if(!$sk)
throw new Ks3ClientException("invalid RSA private key,you can generate key use openssl");
$encryptionMaterials = array($pk,$sk);
}else{
throw new Ks3ClientException("encryptionMaterials should be string or an array of size 2");
}
}
$ks3client = new Ks3Client($accessKey,$secretKey,$endpoint);
$this->encryptionMaterials = $encryptionMaterials;
if(ENCRYPTPTION_MODE == "EO"){
$this->encryptionHandler = new EncryptionEO($ks3client,$encryptionMaterials);
}elseif (ENCRYPTPTION_MODE == "AE") {
throw new Ks3ClientException("Authenticated encryption will be supported in the futher");
}
else{
throw new Ks3ClientException("unsupported encryption mode :".ENCRYPTPTION_MODE);
}
if(ENCRYPTPTION_STORAGE_MODE != "ObjectMetadata"&&ENCRYPTPTION_STORAGE_MODE!="InstructionFile"){
throw new Ks3ClientException("unsupported encryption storage mode :".ENCRYPTPTION_STORAGE_MODE);
}
}
public function putObjectByContent($args=array()){
return $this->encryptionHandler->putObjectByContentSecurely($args);
}
public function putObjectByFile($args=array()){
return $this->encryptionHandler->putObjectByFileSecurely($args);
}
public function getObject($args=array()){
return $this->encryptionHandler->getObjectSecurely($args);
}
public function initMultipartUpload($args=array()){
return $this->encryptionHandler->initMultipartUploadSecurely($args);
}
public function uploadPart($args=array()){
return $this->encryptionHandler->uploadPartSecurely($args);
}
public function abortMultipartUpload($args=array()){
return $this->encryptionHandler->abortMultipartUploadSecurely($args);
}
public function completeMultipartUpload($args=array()){
return $this->encryptionHandler->completeMultipartUploadSecurely($args);
}
public function deleteObject($args=array()){
$result = parent::deleteObject($args);
$args["Key"] = $args["Key"].EncryptionUtil::$INSTRUCTION_SUFFIX;
try {
parent::deleteObject($args);
} catch (Exception $e) {
//do nothing
}
return $result;
}
public function copyObject($args=array()){
if(parent::objectExists(array(
"Bucket"=>$args["Bucket"],
"Key"=>$args["Key"]
))){
throw new Ks3ClientException("copy object faild,destination object exists");
}
if(parent::objectExists(array(
"Bucket"=>$args["CopySource"]["Bucket"],
"Key"=>$args["CopySource"]["Key"].EncryptionUtil::$INSTRUCTION_SUFFIX
))){
parent::copyObject(
array(
"Bucket"=>$args["Bucket"],
"Key"=>$args["Key"].EncryptionUtil::$INSTRUCTION_SUFFIX,
"CopySource"=>array(
"Bucket"=>$args["CopySource"]["Bucket"],
"Key"=>$args["CopySource"]["Key"].EncryptionUtil::$INSTRUCTION_SUFFIX
)
)
);
}
return parent::copyObject($args);
}
public function renameObject($args=array()){
print_r(parent::copyObject(array(
"Bucket"=>$args["Bucket"],
"Key"=>$args["newKey"],
"CopySource"=>array(
"Bucket"=>$args["Bucket"],
"Key"=>$args["Key"]
)
)
));
print_r("after copy succeed");
$ks3client->deleteObject(array(
"Bucket"=>$args["Bucket"],
"Key"=>$args["Key"]
));
// return parent::renameObject($args);
}
}
?>
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
PHP
1
https://gitee.com/egege_gitee/ks3-php-sdk.git
git@gitee.com:egege_gitee/ks3-php-sdk.git
egege_gitee
ks3-php-sdk
ks3-php-sdk
master

搜索帮助