h5图片加密,但在浏览器memory cache中会暴露出来??

在web平上用图片加密,用了以下代码,,图片确定加密了,

const downloadImage = (url, options, onComplete) => {
const func = cc.sys.hasFeature(cc.sys.Feature.IMAGE_BITMAP) && cc.assetManager.allowImageBitmap ? cc.assetManager.downloader.downloadBlob : downloadImageByBuffer;
func(url, options, onComplete);
}
const downloadImageByBuffer = (url, options, onComplete) => {
downloadArrayBuffer(url, options, function (err, data) {
if (err) {
onComplete && onComplete(null, data);
return;
}
//处理加密
if (checkIsEncripted(data, ENCRYPT_SIGN)) {
let index = url.lastIndexOf(".");
let suffix = url.substr(index + 1);
let typeStr = imgTypes[suffix] || imgTypes[“png”];
data = arrayBufferAddHeadEnd(data);
data = decodeArrayBuffer2(data, ENCRYPT_SIGN, ENCRYPT_KEY);
let base64code = arrayBufferToBase64Img(data);
base64code = data:${typeStr};base64,${base64code}
//传入base64数据,
cc.assetManager.downloader.downloadDomImage(base64code, options, onComplete);
}
else {
cc.assetManager.downloader.downloadDomImage(url, options, onComplete);
}
})

}
但是在浏览器中会在memory cache中显示出原图来,有这个有办法解决吗。

我也想知道

电脑上甭管什么平台,什么运行时,什么引擎,图片都是无法加密的,GPU 抓帧啥东西拿不到??

2赞

不用base64改为 把arraybuffer转Uint8ClampedArray 再利用
const bufferViews: ArrayBufferView[] = [buffer];
const bufferCopy = new gfx.BufferTextureCopy();
bufferCopy.texOffset.x = 0;
bufferCopy.texOffset.y = 0;
bufferCopy.texExtent.width = 寛;
bufferCopy.texExtent.height = 高;
let devTexture = newRenderTexture.getGFXTexture();
const device: gfx.Device = newRenderTexture._getGFXDevice();
device.copyBuffersToTexture(bufferViews, devTexture, [bufferCopy]);
这方法写到游戏的renderTexture里用应该就不怕在开发模式中暴露吧?

1赞

:drooling_face:
这种都不用动脑子。
也就防君子不防小人罢了

1赞

自己研发个GPU显示不解码加密图片

君子还用防 他们也不会扒呀

不用 Image 对象解码,自己找个png,jpg解码库,把解码后的像素数据传到gpu纹理中就行了。注意,你base64转成二进制后还得解码,不要直接把数据往gpu里传。但是就跟jare说的一样,抓帧一样可以拿到。

谢谢,我试一下。

好的,我试试。

您好,解决了嘛

电脑上怎么搞都没用的, 下个 About · Graphics API Debugger 直接抓显卡, 操作又简单, 点击下鼠标就行了

你问错人了吧, 我提供代码你问我解决了吗?