📄 fsprotect.java
字号:
/*
* FSProtect.java
* Transform
*
* Copyright (c) 2001-2006 Flagstone Software Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* * Neither the name of Flagstone Software Ltd. nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package com.flagstone.transform;
/**
FSProtect marks a file as not-readable, preventing the file from being loaded into an editor.
<table class="datasheet">
<tr><th align="left" colspan="2">Attributes</th></tr>
<tr>
<td><a name="FSProtect_0">type</a></td>
<td>Identifies the action when it is encoded. Read-only.</td>
</tr>
<tr>
<td><a name="FSProtect_1">password</a></td>
<td>An MD5 encrypted password.</td>
</tr>
</table>
<p>In order to use the debugger a password must be supplied. When encrypted using the MD5 algorithm it must match the value stored in the password attribute.</p>
<p>IMPORTANT: this form of protection only works with Macromedia's Flash Authoring tool. Any application that parses Flash files can choose to ignore or delete this data structure therefore it is not safe to use this to protect the contents of a Flash file.</p>
<p>Transform will parse all Flash files containing the Protect data structure. Since the encoded data is can be removed by trivial scripts the level of copy-protection offered is minimal. Indeed the use of the Protect mechanism in Flash movies may lead to a false sense of security, putting proprietary information at risk. Sensitive information should not be included in Flash movies.</p>
<h1 class="datasheet">History</h1>
<p>The FSProtect class represents the Protect tag from the Macromedia Flash (SWF) File Format Specification. It was introduced in Flash 2. The password attribute was added in Flash 5.</p>
*/
public class FSProtect extends FSMovieObject
{
private String password = null;
/**
* Construct an FSProtect object, initalizing it with values decoded from
* an encoded object.
*
* @param coder an FSCoder containing the binary data.
*/
public FSProtect(FSCoder coder)
{
super(Protect);
decode(coder);
}
/** Constructs an Protect object. */
public FSProtect()
{
super(Protect);
}
/** Constructs an Protect object. */
public FSProtect(String password)
{
super(Protect);
setPassword(password);
}
/**
* Constructs an FSProtect object by copying values from an existing
* object.
*
* @param obj an FSProtect object.
*/
public FSProtect(FSProtect obj)
{
super(obj);
if (obj.password != null)
password = new String(obj.password);
else
password = obj.password;
}
/** Gets the MD5 encrypted password.
@return the string defining the password.
*/
public String getPassword() { return password; }
/** Sets the MD5 encrypted password.
@param aString the string defining the password.
*/
public void setPassword(String aString)
{
password = aString;
}
public boolean equals(Object anObject)
{
boolean result = false;
if (super.equals(anObject))
{
if (password != null)
result = password.equals(((FSProtect)anObject).getPassword());
else
result = ((FSProtect)anObject).getPassword() == null;
}
return result;
}
public void appendDescription(StringBuffer buffer, int depth)
{
buffer.append(name());
if (depth > 0)
{
buffer.append(": { ");
Transform.append(buffer, "password", password);
buffer.append("}");
}
}
public int length(FSCoder coder)
{
super.length(coder);
if ((coder.context[FSCoder.Version] >= 5) && (password != null) && (password.length() > 0))
length += 2 + coder.strlen(password, true);
return length;
}
public void encode(FSCoder coder)
{
super.encode(coder);
if ((coder.context[FSCoder.Version] >= 5) && (password != null) && (password.length() > 0))
{
coder.writeWord(0, 2);
coder.writeString(password);
coder.writeWord(0, 1);
}
coder.endObject(name());
}
public void decode(FSCoder coder)
{
super.decode(coder);
/*
* Force a read of the entire password field, including any
* zero bytes that are encountered.
*/
if ((coder.context[FSCoder.Version] >= 5) && (length > 0))
{
coder.readWord(2, false);
password = coder.readString();
}
coder.endObject(name());
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -