在Canon EOS D1000上加密的XMP数据

时间:2013-04-24 10:19:43

标签: actionscript-3 encryption air xmp

我有一个关于加密的问题,这再次涉及从aux:SerialNumber名称空间读取序列号。

当我从佳能EOS D1000的照片在AS3中打开我的文件时,它无法在ByteArray var i:int = p.search('<x:xmpmeta xmlns:x="\'dobe:ns:meta/\'');中读取此位,因为它已加密。

令人感兴趣的是,如果我在Photoshop中打开文件然后保存并关闭它,XMP数据是正确的,我的应用程序可以读取它。

我的问题是如何从AS3内解密XMP数据?有没有办法做到这一点。还是另一种阅读方式?

这是我使用的方法:

private function getXMP(ba:ByteArray):XML
{   
    var LP:ByteArray = new ByteArray();
    var PACKET:ByteArray = new ByteArray();
    var l:int;

    ba.readBytes(LP, 2, 2);

    //http://www.adobe.com/devnet/xmp.html read part 3: Storage in Files.           
    //that will explain the -2 -29 and other things you see here.

    l = LP.readInt() - 2 -29;
    ba.readBytes(PACKET, 33, l);

    var p:String = trim(""+PACKET);
    var i:int = p.search('<x:xmpmeta xmlns:x="adobe:ns:meta/"');
    //Delete all in front of the XMP XML
    p = p.substr(i);

    //For some reason this left some rubbish in front, so I'll hardcode it out for now 

    var ar:Array = p.split('<');
    var s:String = "";
    var q:int;
    var j:int = ar.length;

    for(q=1;q<j;q++)
    {
        s += '<'+ar[q];
    }
    i = s.search('</x:xmpmeta>');
    i += ('</x:xmpmeta>').length;
    s = s.slice(0,i);
    //Delete all behind the XMP XML
    //trace(s);
    return XML(s);
}

0 个答案:

没有答案