// 创建原始客户端u, _ := url.Parse("https://examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com")b := &cos.BaseURL{BucketURL: u}c := cos.NewClient(b, &http.Client{Transport: &cos.AuthorizationTransport{SecretID: os.Getenv("SECRETID"), // 用户的 SecretId,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://www.tencentcloud.com/document/product/598/37140?from_cn_redirect=1SecretKey: os.Getenv("SECRETKEY"), // 用户的 SecretKey,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://www.tencentcloud.com/document/product/598/37140?from_cn_redirect=1},})// Case1 上传对象name := "test/example"// 该标识信息唯一确认一个主加密密钥, 解密时,需要传入相同的标识信息// KMS加密时,该信息设置成 EncryptionContext,最大支持1024字符,如果 Encrypt 指定了该参数,则在 Decrypt 时需要提供同样的参数materialDesc := make(map[string]string)//materialDesc["desc"] = "material information of your master encrypt key"// 创建 KMS 客户端kmsclient, _ := coscrypto.NewKMSClient(c.GetCredential(), "ap-guangzhou")// 创建 KMS 主加密密钥,标识信息 materialDesc 和主密钥一一对应kmsID := os.Getenv("KMSID")masterCipher, _ := coscrypto.CreateMasterKMS(kmsclient, kmsID, materialDesc)// 创建加密客户端client := coscrypto.NewCryptoClient(c, masterCipher)contentLength := 1024*1024*10 + 1originData := make([]byte, contentLength)_, err := rand.Read(originData)f := bytes.NewReader(originData)// 加密上传_, err = client.Object.Put(context.Background(), name, f, nil)log_status(err)// 解密下载resp, err := client.Object.Get(context.Background(), name, nil)log_status(err)defer resp.Body.Close()decryptedData, _ := ioutil.ReadAll(resp.Body)if bytes.Compare(decryptedData, originData[rangeStart:rangeEnd+1]) != 0 {fmt.Println("Error: encryptedData != originData")}
// 创建原始客户端u, _ := url.Parse("https://examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com")b := &cos.BaseURL{BucketURL: u}c := cos.NewClient(b, &http.Client{Transport: &cos.AuthorizationTransport{SecretID: os.Getenv("SECRETID"), // 用户的 SecretId,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://www.tencentcloud.com/document/product/598/37140?from_cn_redirect=1SecretKey: os.Getenv("SECRETKEY"), // 用户的 SecretKey,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://www.tencentcloud.com/document/product/598/37140?from_cn_redirect=1},})// Case1 上传对象name := "test/example"// 该标识信息唯一确认一个主加密密钥, 解密时,需要传入相同的标识信息// KMS 加密时,该信息设置成 EncryptionContext,最大支持1024字符,如果 Encrypt 指定了该参数,则在 Decrypt 时需要提供同样的参数materialDesc := make(map[string]string)//materialDesc["desc"] = "material information of your master encrypt key"// 创建KMS客户端kmsclient, _ := coscrypto.NewKMSClient(c.GetCredential(), "ap-guangzhou")// 创建 KMS 主加密密钥,标识信息 materialDesc 和主密钥一一对应kmsID := os.Getenv("KMSID")masterCipher, _ := coscrypto.CreateMasterKMS(kmsclient, kmsID, materialDesc)// 创建加密客户端client := coscrypto.NewCryptoClient(c, masterCipher)// 加密上传_, err = client.Object.PutFromFile(context.Background(), name, filepath, nil)if err != nil {//ERROR}// 解密下载_, err = client.Object.GetToFile(context.Background(), name, "./test.download", nil)if err != nil {//ERROR}
// 创建原始客户端u, _ := url.Parse("https://examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com")b := &cos.BaseURL{BucketURL: u}c := cos.NewClient(b, &http.Client{Transport: &cos.AuthorizationTransport{SecretID: os.Getenv("SECRETID"), // 用户的 SecretId,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://www.tencentcloud.com/document/product/598/37140?from_cn_redirect=1SecretKey: os.Getenv("SECRETKEY"), // 用户的 SecretKey,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://www.tencentcloud.com/document/product/598/37140?from_cn_redirect=1},})// Case1 上传对象name := "test/example"// 该标识信息唯一确认一个主加密密钥, 解密时,需要传入相同的标识信息// KMS 加密时,该信息设置成 EncryptionContext,最大支持1024字符,如果 Encrypt 指定了该参数,则在 Decrypt 时需要提供同样的参数materialDesc := make(map[string]string)//materialDesc["desc"] = "material information of your master encrypt key"// 创建 KMS 客户端kmsclient, _ := coscrypto.NewKMSClient(c.GetCredential(), "ap-guangzhou")// 创建 KMS 主加密密钥,标识信息 materialDesc 和主密钥一一对应kmsID := os.Getenv("KMSID")masterCipher, _ := coscrypto.CreateMasterKMS(kmsclient, kmsID, materialDesc)// 创建加密客户端client := coscrypto.NewCryptoClient(c, masterCipher)filepath := "test"stat, err := os.Stat(filepath)if err !- nil {// ERROR}contentLength := stat.Size()// 分块上传// 每个分块需要16字节对齐,且大于等于1MBpartSize := (contentLength / 16 / 3) * 16if partSize < int64(1024*1024) {partSize = int64(1024*1024)}cryptoCtx := coscrypto.CryptoContext{DataSize: contentLength,// 每个分块需要16字节对齐PartSize: partSize,}// 切分数据_, chunks, _, err := cos.SplitFileIntoChunks(filepath, cryptoCtx.PartSize)if err !- nil {// ERROR}// init mulituploadv, _, err := client.Object.InitiateMultipartUpload(context.Background(), name, nil, &cryptoCtx)if err !- nil {// ERROR}// part uploadoptcom := &cos.CompleteMultipartUploadOptions{}for _, chunk := range chunks {fd, err := os.Open(filepath)if err !- nil {// ERROR}opt := &cos.ObjectUploadPartOptions{ContentLength: chunk.Size,}fd.Seek(chunk.OffSet, os.SEEK_SET)resp, err := client.Object.UploadPart(context.Background(), name, v.UploadID, chunk.Number, cos.LimitReadCloser(fd, chunk.Size), opt, &cryptoCtx)if err !- nil {// ERROR}optcom.Parts = append(optcom.Parts, cos.Object{PartNumber: chunk.Number, ETag: resp.Header.Get("ETag"),})}// complete upload_, _, err = client.Object.CompleteMultipartUpload(context.Background(), name, v.UploadID, optcom)if err !- nil {// ERROR}_, err = client.Object.GetToFile(context.Background(), name, "test.download", nil)if err !- nil {// ERROR}
本页内容是否解决了您的问题?