我经常搜索并无处可寻。我需要知道这一点,我可以使用X类型的填充进行加密并使用Y进行解密吗?
例如,使用ISO 10126
加密并使用PKCS#7
或ANSI X.923
进行解密?
或者它只能使用与encryption
和decryption
相同的算法?
提前致谢。
答案 0 :(得分:1)
从理论上讲,你不能,那些与大多数加密算法相同的算法彼此不兼容。
您可以使用不同的算法对某些内容进行两次或更多次加密,但您需要始终使用相同的算法对其进行解密,并使用正确的顺序(反转)。
与填充相同,每个填充可能会生成不同的内容,因此您不能指望其他算法正确地找出原始邮件的内容。举个例子,用ISO加密并用ANSI X.923解密,你会看到结果不同。
让我们接收一条消息和8个字节的块:
package
{
import com.tavernari.asworker.ASWorker;
import com.tavernari.asworker.notification.NotificationCenter;
import com.tavernari.asworker.notification.NotificationCenterEvent;
import flash.display.Sprite;
public class ASWorkerDemo extends Sprite
{
private var asWorker:ASWorker;
//BOTH AREA
public function ASWorkerDemo()
{
//important know, all class start here will be replicated in all works.
asWorker = new ASWorker(this.stage, uiWorkerStartedHandler, backWorkerStartedHandler);
}
//BOTH AREA END
//UI AREA START
private function uiWorkerStartedHandler():void{
//implement all class or calls for your UI
NotificationCenter.addEventListener("FROM_BACK_EVENT_MESSAGE", onFromBackEventMessageHandler );
}
private function onFromBackEventMessageHandler(e:NotificationCenterEvent):void
{
trace(e.data);
if(e.data == "completed job"){
NotificationCenter.dispatchEventBetweenWorkers( new NotificationCenterEvent("NEXT_MESSAGE") );
}
}
//UI AREA END
//BACK AREA START
private function backWorkerStartedHandler():void{
//implement all class or calls for your BACK operations
NotificationCenter.addEventListener("NEXT_MESSAGE", uiCallForNextMessageHandler );
}
private function uiCallForNextMessageHandler():void
{
for(var i:int = 0; i < 15; ++i){
NotificationCenter.dispatchEventBetweenWorkers( new NotificationCenterEvent("FROM_BACK_EVENT_MESSAGE", false, i) );
}
NotificationCenter.dispatchEventBetweenWorkers( new NotificationCenterEvent("FROM_BACK_EVENT_MESSAGE", false, "completed job") );
}
// BACK AREA END
}
}
ANSI X.923填充:
... | DD DD DD DD DD DD DD DD | DD DD DD DD
ISO 10126填充:
... | DD DD DD DD DD DD DD DD | DD DD DD DD 00 00 00 04 |
如果您首先使用ISO,那么ANSI预计会增加3个字节为 00 &#39;,而它们不是(ISO添加随机的)。现在即使有&#39; 04 &#39;建议可以添加4个字节,但显然不匹配。因此,它会假设没有添加任何内容并声明填充消息为原始消息。
注意:如果以某种方式数据的性质让你决定什么是填充,什么不是,那么你可以使用你想要的任何东西。只需在解密后删除填充
UPATE: 正如 Artjom B。已经注意到,ISO 10126的解密将与例如兼容。 ANSI X.923和PKCS#7,因为它假定随机字节填充,并且最后一个字节的方法是相同的。
此外,算法没有必要精确地遵循规范,在这种情况下,它们可能会从完整格式验证中退出,从而变得更加兼容。