java音乐播放器代码

2024-04-14

java音乐播放器代码(精选6篇)

篇1:java音乐播放器代码

package ChatClient;

import java.awt.*;import java.net.*;import java.awt.event.*;import java.io.*;import java.applet.*;class AudioClipWindow extends Frame implements Runnable,ItemListener,ActionListener { Thread thread;

Choice choice;

URL url;

AudioClip clip;

Button buttonPlay,buttonLoop,buttonStop;

String str;

AudioClipWindow(ActionListener chatClient)

{

thread=new Thread(this);

choice=new Choice();

choice.add(“陈绮贞-我在那一角落患过伤风.wav”);

choice.add(“no one wants forever.wma.wav”);

choice.add(“中岛美嘉-雪之华(韩雪-飘雪)日文版.wav”);

choice.addItemListener(this);

buttonPlay=new Button(“播放”);

buttonLoop=new Button(“循环”);

buttonStop=new Button(“停止”);

buttonPlay.addActionListener(this);

buttonStop.addActionListener(this);

buttonLoop.addActionListener(this);

setLayout(new FlowLayout());

add(choice);

add(buttonPlay);

add(buttonLoop);

add(buttonStop);

setSize(350,120);

setVisible(true);

addWindowListener(new WindowAdapter()

{ public void windowClosing(WindowEvent e)

{ System.exit(0);

}

});

validate();

}

public void itemStateChanged(ItemEvent e)

{ str=choice.getSelectedItem();

if(!(thread.isAlive()))

{ thread=new Thread(this);

}

try{ thread.start();

}

catch(Exception ee){}

}

public void run()

{ try{ File file=new File(str);

url=file.toURL();

clip=Applet.newAudioClip(url);

}

catch(Exception e)

{ System.out.println(e);

}

}

public void actionPerformed(ActionEvent e)

{ if(e.getSource()==buttonPlay)

{ clip.play();

}

else if(e.getSource()==buttonLoop)

{ clip.loop();

}

if(e.getSource()==buttonStop)

{ clip.stop();

}

} }

篇2:java音乐播放器代码

题目:java音乐播放器

名 学

号 院

系 班

级 专

业 任课教师

1.设计内容及要求

能够实现简单的音乐播放器功能,如:打开本地文件,播放,暂停,停止,背景播放,单曲循环等等,界面充实,交互友好,可以添加多首歌曲目录

一个简单的基于java语言的音乐播放器,菜单栏:文件,播放控制和播放列表,文件菜单包含打开、循环和退出三个菜单项;播放控制菜单包含播放、暂停和停止三个菜单项,播放列表菜单则是当向里面添加歌曲之后才能够查看到里面所包含的歌曲目录。当播放歌曲时,可以调节音量大小或者设置是否静音;可以查看当前播放音乐的相关属性,如:歌曲名,歌手,发布时间,所属专辑等等。

2.需求分析

1、时间跟踪条:根据歌曲播放的进度,控制条自动进行追踪,用户可以

随时了解歌曲的播放进度

2、音量控制键:可以点击该控键进行音量大小的调节以及是否静音的设

3、属性查询键:通过该控键,用户可以查看当前播放音乐的相属性,获

取关于该歌曲的用户所需的相关信息。

4、菜单栏:

①文件:

打开:用户通过该菜单项打开本地音乐文件,听任何用户想

听的歌曲

循环:通过循环设置,用户可以重复的播放一首喜欢的歌曲

退出:退出音乐播放器,及退出该程序

②播放控制:

播放:选择歌曲之后,通过点击播放菜单项启动播放器播

放音乐

暂停:暂停当前正在播放的音乐

停止:停止当前正在播放的音乐

③播放列表:当用户通过文件打开本地音乐文件后,及相当于在

播放列表里面添加了歌曲,及形成相应的歌曲播放目录

3.总体设计

结合需求分析来看,整个设计包含了简单的菜单栏,根据用户需求设置了三个简单的实现基本操作的菜单,分别是:文件,播放控制,播放列表;根据具体的操作每个菜单还包含了相应的菜单项,文件:打开,循环,退出;播放控制:播放,暂停,停止;播放列表则没有菜单项,该菜单就是用来显示或者查看相应的歌曲目录的。

该音乐播放器设置了两个窗口,运行程序时打开的初始化欢迎界面,用户可以根据自己的需求进行菜单栏里面的基本操作和相应的设置,当用户添加或者打开音乐播放文件的时候,程序将会显示出第二个音乐文件播放窗口,与此同时,第一个初始化窗口将会自动隐藏,在音乐播放窗口里面用户可以进行相关的音乐播放的控制操作。

当用户进入音乐播放窗口时,该窗口有几个快捷控制的控键:时间追踪轴:可以实现播放的前进、后退功能,根据用户需求调节音乐的播放进度等;音量控制:设置静音,打开扬声器或者调节音量大小;播放列表:查看当前播放音乐的相关属性。4.主要功能设计流程

5.系统实现及测试:

(一)JMF(java媒体框架)简介

JMF 即Java媒体框架。其核心框架支持不同媒体,如音频输出和视频输出,包括时间的时钟同步。它是一个标准的扩展框架,允许用户制作纯音频流和视频流。

JMF实际上是Java的一个类包。它包括了一个开放的媒体架构,可使开发人员灵活采用各种媒体回放、捕获组件,或采用他们自己的定制的内插组件。

JMF软件是Java Media系列软件的一部分。采用各种Java Media API,软件开发商人员就能容易、快速地为他们已有的各种应用程序和客户端,Java小程序增添丰富的媒体功能,如流式视频、3D图像和影像处理等。就是 说,各种Java Media API发挥了Java平台的固有优势,将“编写一次,到处运行”的能力扩展到了图像、影像和数字媒体等各种应用领域,从而大大缩减了开发时间和降低了开发 成本。

在开发JMF 应用程序之前要完全理解JMF 的体系架构、接口和类。就拿我们的家用摄像机系统作个例子。首先用摄像机拍摄内容,拍摄下来的内容录制在DV带中。DV带可以放在放像机里播放、放像机提供视频信号给电视机,提供音频信号给音箱,这样我们就可以在电视机上看到画面,从音箱里听到声音。JMF API 提供的也是同样的模型。

JMF 提供的模型可大致分为七类

* 数据源(Data source)

* 截取设备(Capture Device,包括视频和音频截取设备)

* 播放器(Player)

* 处理器(Processor)

* 数据池(DataSink)

* 数据格式(Format)

* 管理器(Manager)

如果只是想观看捕获的内容,只需要使用捕获数据源创建播放器Player即可。如果想把捕获的数据发送到网络或者保存起来,就需要创建处理器Processor。

基本步骤是首先获取视频、音频捕获设备的信息,然后再根据取得的设备信息确定设备的位置。找到设备的位置以后,调用ManageCreatePlayer方法创建Player,当Player开始播放的时候,就开始了捕获的过程。

有多种方法获得捕获设备信息,可以通过查询指定的格式,也可以查询特定的设备名字。Player准备好播放数据,当Player发出这个事件时,就可以获取播放器的可视面板和控制面板了。具体步骤如下:

1.先把所有的捕获设备调出来

2.创建Player,当Play开始的时候,就开始了音频捕获的过程

3.以MediaLocator为参数,创建Player 4.为PLAYER添加监听器,以便监听RealizeComplete事件

(二)代码实现

(1)添加库、包等相关文件 import javax.media.ControllerEvent;import javax.media.ControllerListener;import javax.media.EndOfMediaEvent;import javax.media.PrefetchCompleteEvent;import javax.media.RealizeCompleteEvent;import javax.media.*;import javax.swing.*;import java.awt.*;

import java.awt.event.*;

(2)初始化窗口 ①界面

②代码实现

public void setupMenu(){

Menu f = new Menu(“文件”);

MenuItem mi = new MenuItem(“打开”);

CheckboxMenuItem cbmi = new CheckboxMenuItem(“循环”, false);MenuItem ee = new MenuItem(“退出”);f.add(mi);f.add(cbmi);f.add(ee);

mi.addActionListener(this);cbmi.addActionListener(this);ee.addActionListener(this);f.addSeparator();f.addSeparator();f.addSeparator();

Menu l = new Menu(“播放列表”);Menu c = new Menu(“播放控制”);

MenuItem move = new MenuItem(“播放”);MenuItem pause = new MenuItem(“暂停”);MenuItem stop = new MenuItem(“停止”);move.addActionListener(this);pause.addActionListener(this);stop.addActionListener(this);c.add(move);c.add(pause);c.add(stop);

c.addSeparator();c.addSeparator();c.addSeparator();

MenuBar mb = new MenuBar();mb.add(f);mb.add(c);mb.add(l);

setMenuBar(mb);}

(3)音乐播放窗口机基本功能的实现 ①界面

②代码实现

public void actionPerformed(ActionEvent e){

String cufile, selectfile, currentDirectory;if(e.getActionCommand().equals(“退出”)){

dispose();

return;}

if(e.getActionCommand().equals(“播放”)){ if(player!= null)

player.start();return;

} if(e.getActionCommand().equals(“暂停”))

{

if(player!= null)

player.stop();return;}

if(e.getActionCommand().equals(“停止”)){

if(player!= null){

player.stop();

player.setMediaTime(new Time(0));} return;}

if(e.getActionCommand().equals(“打开”)){

FileDialog fd = new FileDialog(this, “打开媒体文件”, FileDialog.LOAD);fd.setVisible(true);

if(fd.getFile()== null)

return;

selectfile = fd.getFile();

currentDirectory = fd.getDirectory();

cufile = currentDirectory + selectfile;

MenuItem mi = new MenuItem(selectfile);mi.setActionCommand(cufile);MenuBar mb = getMenuBar();Menu m = mb.getMenu(2);mi.addActionListener(this);m.add(mi);} else {

cufile = e.getActionCommand();selectfile = cufile;}

if(player!= null)

player.close();try {

player = Manager.createPlayer(new MediaLocator(“file:” + cufile));}catch(Exception e2)

{

System.out.println(e2);return;}

if(player == null){

System.out.println(“无法创建播放器”);return;}

first = false;

setTitle(selectfile);

player.addControllerListener(this);player.prefetch();}

public void itemStateChanged(ItemEvent arg0){ }

public static void main(String[] args){

new MediaPlayer(“播放器”);}

public void controllerUpdate(ControllerEvent e){

Container tainer = getContentPane();if(e instanceof ControllerClosedEvent){

if(vc!= null){

remove(vc);vc = null;}

if(cc!= null){

remove(cc);cc = null;} }

if(e instanceof EndOfMediaEvent){

player.setMediaTime(new Time(0));if(loop)

player.start();return;}

if(e instanceof PrefetchCompleteEvent){

player.start();return;}

if(e instanceof RealizeCompleteEvent){

vc = player.getVisualComponent();if(vc!= null)

tainer.add(vc, BorderLayout.CENTER);

cc = player.getControlPanelComponent();cc.setBackground(Color.blue);if(cc!= null)

{ tainer.add(cc, BorderLayout.SOUTH);if(vc!= null){

pack();return;}

Else {

setSize(300, 75);setVisible(true);return;} } }

}

6.总结与说明

在做写程序实现功能的过程中,界面和基本功能的设计需要较强的逻辑思维,一不小心就容易出错,在具体的功能设计和实现的过程中要尽可能用最简单的语句实现基本的播放器功能。我觉得可以设计更多的菜单及菜单项目从而实现更多的功能,如:删除,保存等,还可以实现更多的背景效果或者更多可选择的皮肤,还可以对按钮添加音效效果,这样感觉整个音乐播放器更具有灵活性,媒体感更强烈一些,界面会更加丰富和生动一些。

篇3:java音乐播放器代码

随着Java平台的广泛使用,Java平台下移动代码的安全性受到越来越多人的关注。Java平台的安全模型从JDK1.0到现在的Java 6.0,Java平台的安全体系不断改进,整体安全性也不断得到加强。

网上程序在动态性上是令人满意的,但它们在安全性和可移植性方面也显示出严重的缺陷。在Java产生以前,当前赛百空间有一半的对象实体无法进入网络世界,是Java为它们打开了便利之门,而且在这个过程中定义了一种全新的程序形式:Applet(Java小应用程序)。

Java可用来生成两类程序:应用程序(Applications)和Java Applet(小应用程序)。应用程序是可以在你的计算机的操作系统中运行的程序。小应用程序是可以在Internet中传输并在兼容Java的Web浏览器中运行的应用程序。小应用程序实际上就是小型的Java程序,能像图像文件、声音文件和视频片段那样通过网络动态下载,它与其他文件的重要差别是,小应用程序是一个智能的程序,能对用户的输入作出反应,并且能动态变化,而不是一遍又一遍地播放同一动画或声音。

Java移动代码是一种可以通过网络从一台计算机传到另一台计算机上运行的Java程序(如:Java Applet),在现代网络计算及电子商务中具有广泛应用。

Java平台的安全模型经历了一个不断发展的过程,从JDK1.0到现在的Java 2 SDK v1.4,再到Java 6.0。Java平台的安全体系不断演变,新的安全模型和机制不断提出,而整体安全性也不断得到加强[1]。由此使得Java移动代码的安全性也不断演变。

2 JDK1.1安全模型

在Sun Java平台最初的版本—————Java开发包(Java Development Kit,JDK)1.0.x中,引入了基于沙箱(Sandbox)的安全模型。该模型主要支持安全地下载和运行Java Applet,并规避所有针对用户资源的潜在风险。

沙箱模型的实质是本地代码对重要的系统资源有全部的访问权限,而下载的代码(例如Applet)则不被信任并且仅能够访问沙箱提供的有限资源。沙箱模型如图1所示。

在JDK1.0沙箱安全模型中,所有的Applet都被认为是不可信的,被限制在沙箱模式中运行。这种限制对于计算机环境的安全非常有利,但却太苛刻了。JDK1.1引入了“Signed Applet”的概念,如图2所示。在该版本中,允许在验证Applet签名者的信息后,将Applet作为可信代码下载并执行。为支持签名Applet,JDK1.1.x还新增了对加密算法的支持以便提供数字签名功能。有了这些支持,就可以对Java Applet类进行数字签名,生成Java(Java Archive Format,JAR)归档格式文件。被签名的Applet和他们的签名一起以JAR的格式发送,未签名的Applet仍然运行在沙箱环境中。如果某个Applent的签名者被验证为可信,那么这个Applent就可以像本地资源一样自由的访问系统了。

3 Java 2安全模型

从JDK1.2开始,Sun将Java平台升级为Java 2平台,Java 2安全模型弥补早期安全模型的局限性(此问题的详细论述可参阅文献[2]),并且在Java 2平台提出了全新的安全体系结构,如图3所示。

引入新的安全体系结构的重大优势:

1)细致的访问控制。这种能力一开始就存在于JDK中,但是使用它需要程序开发人员做大量的编程工作,例如继承(Subclassing)和定制SecurityManager和ClassLoader类。HotJava浏览器1.0就是这样的应用程序,因为它允许浏览器用户选择不同的安全级别。然而,这种编程方法具有极端的安全敏感性,并且要求高超的技术和深厚的计算机安全知识。新的安全体系结构使得这个过程比较简单和安全。

2)容易配置的安全策略。这种能力也较早出现在JDK中并且不易使用,更为重要的是编写安全代码不够直观,让程序开发人员和用户不需要编程只需配置安全策略,这才是大家所期望的。

3)容易扩展的访问控制结构。新的体系结构允许类型化的许可权限(每一个许可权限代表着对一个系统资源的访问)以及对正确类型的所有许可权限的自动处理(包括还没有定义的许可权限)。

4)安全检查扩展到所有的Java程序。不再有内在的“所有本地代码都是可信”的概念。尽管,需要的话可以让本地代码具有最自由的安全政策———使得那些代码完全被信任并且有效的运行,但是在新的安全体系结构里面,本地代码(例如非系统代码,安装在本地文件上的应用程序包)象Applet一样受到严格的安全控制。

5)对安全类(包括SecurityManager和ClassLoader)的设计中作内部调整以减少在未来编程中存在细小安全漏洞的风险等。

4 移动代码安全性在Java 6中的增强

在Java 6的安全部分,又增加了XML-Digital Signature(XML-DSIG)APIs,整合了GSS/Kerberos的操作API、LDAP上的JAAS认证。现在Sun公司的Java 6平台,更是提供了一整套安全有效的移动代码安全性解决方案,我们通过使用Java 6平台,可以使自己开发的移动代码获得足够高的安全性,以及足够的灵活性。既可以达到安全使用的目的,同时又不丧失移动代码可以进行的工作以及进行操作的简易性。

4.1 算法支持

1)SunPKCS11支持椭圆曲线算法(Elliptic Curve Cryptography)。

如果底层PKCS#11接口支持ECC算法,SunPKCS11可以在Java平台提供ECC的支持,包括了ECDSA签名、验证,ECDH密钥协商,以及EC密钥对生成。

ECC是美国家安全局所选择的下一代安全技术,其宗旨是保护美国政府的机密信息。Java System Web Server中的组件可大大减少完成安全在线处理的时间,因此可提高系统的性能和缩放能力。同时,ECC加密技术也提高了Java System Web Server的安全性能。

ECC加密技术比起传统加密技术在解密时使用的公钥较小,但可获得同等级的安全性能。较小的公钥就能获得更高的资源利用率、更长的电池寿命和更快的计算速度。

2)SunJSSE支持椭圆曲线算法。

现在如果JDK中存在合适的密码算法提供者提供ECC算法(例如,有合适的底层PKCS#11库支持的SunPKCS11),SunJSSE可支持RFC4492(传输层安全(TLS)的ECC密码组)中定义的ECC算法。

4.2 对本地Microsoft Windows系统PKI和密码服务的调用

增加了一个JCE提供者SunMSCAPI,SunMSCAPI使用Microsoft CryptoAPI(CAPI)提供各种RSA算法的功能实现。它成为Java应用程序和通过CAPI中CSP(Cryptographic Service Provider)提供的RSA算法服务之间的桥梁。SunMSCAPI提供了使用X.509证书和RSA密钥对的方法,可以进行RSA加密和解密,可以创建和验证RSA签名等,同时提供密码算法中使用的随机数生成器。

4.3 强化了PKI证书路径验证的实现

增加了分段和重定向CRL的支持,提高了兼容PKIX的性能(RFC3280)。

4.4 使用LDAP实现JAAS为基础的身份鉴别

JAAS中增加了一个登录模块,从而用户可以使用LDAP中储存的证书进行身份认证。它为JAAS为基础的那些希望支持使用LDAP进行身份认证的已有应用程序提供了一种解决方式。

4.5 其他相关安全性改善

1)SunPKCS11支持访问NSS(Network Security Services)

SunPKCS11提供者现在支持新的配置方式,使用户可以访问NSS(Netscape Security Services)安全库。这种方式使得Java应用程序可以从NSS数据库文件中读取密钥,从而可以使用ECC算法,并且将NSS软件Token做为一个兼容FIPS140的密码算法提供者。

2)SunJSSE兼容FIPS140

SunJSSE现在实验性的支持FIPS140兼容模式。当一起激活并使用SunPKCS11提供者和经FIPS140认证的合适的PKCS#11接口库,SunJSSE就可兼容FIPS140。

3)套接字(Socket)读取超时在SunJSSE SSLSocket中已经可以完全支持。

前面的版本中,调用setSoTimout()可能有时导致不可预知的结果,现在已经被修正。

4)SunJCE分组密码中增加CTS(Cipher Text Stealing)模式。

CTS是Bruce Schneier在“应用密码学-第二版”中描述的,并被用在一些Kerberos实现中。CTS是算法的密文挪用模式,处理任意长度的明文且密文的长度匹配明文的长度。

5)Java GSS支持SPNEGO

Java GSS现在支持SPNEGO。SPNEGO(Simple and Protected GSS-API Negotiation)机制是一种伪安全机制,使得GSS-API端端

之间可以安全的协商一个公共的安全机制来使用。

6)Java GSS/Kerberos支持新的Pre-Authentication机制。

Java GSS/Kerberos支持在最新的Kerberos规范中描述的Pre-Authentication机制。

7)Java GSS/Kerberos支持AES加密类型

Java GSS/Kerberos现在可以支持AES加密类型(包括AES128和AES256)。这项改动增强了Java SE Kerberos实现与其他Kerberos实现的互操作性(例如Solaris 10和MIT Kerberos)。

8)Java GSS/Kerberos支持RC4-HMAC加密类型

Java GSS/Kerberos现在可以支持RC4-HMAC加密类型。这项改动增强了Java SE Kerberos实现与其他Kerberos实现的互操作性(例如Windows,Solaris 10和MIT Kerberos)。Windows AD(Active Directory)支持将RC4-HMAC做为Kerberos默认加密类型。

5 结论及讨论

Java平台的安全模型是经历了一个发展过程才转变为现在的形式,在这个转变过程中Java平台的安全性不断得到加强,并且提供了一整套安全有效的移动代码安全性解决方案,我们通过使用Java平台,可以使自己开发的移动代码获得足够高的安全性,以及足够的灵活性。既可以达到安全使用的目的,同时又不丧失移动代码可以进行的工作以及进行操作的简易性。Java平台实现的移动代码拥有广阔的前景

参考文献

[1]Li Gong,Security on the Java Platform:Recent Developments and Future Directions,JavaOne1998.

[2]Li Gong,Inside Java2Platform Security Architechture,API design and Implementation,Sun Microsystems Inc,1999.

[3]JavaTM2SDK.Standard Edition Documentation Version1.4.2.Sun Microsystem,2004.

[4]JavaTM Archive(JAR)Features.Sun Microsystem,2003.

[5]jar-The Java Archive Tool.Sun Microsystem,2003.

篇4:Java代码混淆技术研究

关键词:混淆技术;Java;编程;算法

中图分类号:TP312 文献标识码:A 文章编号:1674-7712 (2012) 18-0038-01

一、前言

Java作为一种新一代的编程语言,其因编程简单、跨平台性可操作性强被许多的开发人员和公司喜爱,而且如今已经成为应用程序的主流开发软件。然而,Java编译器在编译时是将代码引用到的变量和方法符号保留在字节码文件中,并且这些符号都有语义信息,因此使得开发的程序很容易被反编译,导致软件被破解。最终将使得开发者的知识产权受到侵害。为了保护开发者的权益,代码混淆技术变应运而生。

二、混淆技术的发展

早在1997年Collberg便开始了对代码混淆的研究,在他发表的文章中提出了代码混淆变换的各种类型,他将其分为四类:代码外形混淆、控制命令混淆、内部数据混淆以及预防混淆。随后Kelly等人构造了一种用来实现构造代码的混淆算法机制。在国内,近些年了也有一些学者逐渐意识到了代码混淆技术在进行程序编写中的重要性,大量研究之后取得了较大的成果。比较有代表的有李永祥的多分语句控制迷惑技术,李长春的执行重整混淆算法等。由于混淆技术具有非常重要的软件保护作用,相信未来肯定会有更多的人和组织加入到代码混淆技术的相关研究课题中来。

三、混淆技术介绍

(一)混淆变换原理

作为一种非常实用的软件保护策略,代码混淆技术的基本思想是将应用程序在保持语句含义不变的前提下实现P到P’的变换。此变换中必须满足条件:P‘和P具有相同的运行结果;若P‘出错终止或终止失败,P也必须出错地终止或终止失败;P‘产生与P一样的输出。两个程序唯一不同的只是P‘比P更难去进行反编译,并且P‘可读性差以及相关工具难以解析。因此经过这种变换可以到达混淆的目的,使软件不易被攻击。

(二)混淆的应用领域

代码混淆的应用范围很广,归纳起来主要有一下几种领域:⑴分布式计算和软件保护;⑵法保护和DRM;⑶同形加密;

(三)混淆的分类

代码混淆技术根据混淆对象的不同可以分为四种:代码外形混淆、控制命令混淆、内部数据混淆和预防混淆。

1.代码外形混淆。Java混淆器使用到的混淆方法中代码外形混淆最为典型,该算法可以将Java所有源代码中包含的类的功能隐藏。如果最初的格式信息被除去后代码将不能恢复,因此称这种混淆为单向变换。程序经过这种变换后时间和空间复杂度不会受影响,因为它并没有额外执行代价。

代码外形混淆主要使用的技术有删除(删除程序和中的注释、调试信息、未被调用的方法和類等)和改名(程序中的变量名、常量名、类名、方法名等)。此变换可以使程序的理解变难。

2.控制命令混淆。控制命令混淆能增加程序的复杂度和程序的反编译时间,它是通过改变程序的判断条件或添加可控判断条件以及对程序的结构和流程进行调整来实现的。常常用到的控制命令混淆主要有排序、聚集和计算变换。

3.内部数据混淆。内部数据混淆技术将会利用数据流中的难点问题,向程序中引入使程序精度降低或难度增加的因素,进而可以影响反编译器对程序的分析结果。内部数据混淆只会变换代码中的数据结构,而不修改软件代码。

进行内部数据混淆的主要方法有四种:变量分裂与变量合并、数据结构变换、静态数据动态生成、类继承转换。

4.预防变换。预防变换是利用某些专用反汇编工具的弱点而设计的。具体混淆可以分为针对特定目标实施的预防变换或者是依据已知的反编译算法实现的混淆。

5.四种混淆技术的分析和比较。代码外形混淆使攻击者解读程序造成不便,同时也能针对反编译工具的算法使之反编译难以实施。内部数据混淆改变逻辑变量。控制命令混淆使程序变得更加复杂从而增强程序的抵抗性能。预防混淆较多时候都是具有一定的针对性。内部数据混淆和控制混淆都会在增加程序复杂度的同时造成程序执行效率的下降,而代码外形混淆则不会影响执行效率。

四、标示符重命名混淆算法

标示符重命名混淆属于代码外形混淆的范畴。它是将字节码文件中的一些类名、接口名、方法名等替换为其他无意义的名字。这并没有造成程序的额外开销,抗攻击能力也不强。

重命名是因为进行内部数据混淆和控制混淆时都会增加程序的开销,而这并不是我们想要的。有时候我们经常需要一种可以抵抗攻击并且不会造成程序执行效率下降的算法,而重命名混淆正是这样的。当一些名字被毫无意义的字符替换后,攻击者很难从中读出该名字所代表的意义,这便使得攻击者在反编译是造成了困难。

当程序中一个实体被重命名后,所有与其相关的内容必须更新,否则会引起运行出错。但是有一些是不能被重命名的。这便有了代码混淆范围的提出。以下三种标示符是不在范围内的:(1)子类中一个超类或接口中抽象方法的实体方法;(2)超类中继承方法的重写;(3)特殊属性明确规定不可进行替换。

标示符重名算法可以分为四种:静态方法重写、替换非法提示符、无关联方法重载、部分标识符滥用。

五、算法分析

衡量一个混淆算法性能好坏的重要指标是对程序执行开销的影响。内部数据混淆和控制命令混淆都增加了程序的二外执行开销从而影响了程序的运行效率。重命名混淆只是将名字替换,很多时候都会将名字缩短,使文件变得更小,不会造成执行效率的下降,同时也使攻击者将花费更长的时间来理解和反编译程序。

六、总结

代码混淆技术是时下最常用的,同时也是最有效的保护Java软件的方法,新型的混淆算法一定会随着技术的发展而被发现。虽然代码混淆技术在一定程度上保护了软件的安全以及开发者的权益,但只有我们杜绝使用盗版软件同时不去侵犯他人的知识产权才能切实的保护好开发者的权益。

参考文献:

[1]魏会生.基于JAVA类文件保护的探讨[J].工会博览·理论研究,2011,3:25-26.

[2]魏衍君,王应战.Java语言混淆器模型研究[J].科技信息,2012,4:61-62.

篇5:java音乐播放器代码

microsoft windows xp sp2

microsoft windows xp sp1

microsoft windows server 2003 sp1

microsoft windows server 2003

microsoft windows me

microsoft windows 98se

microsoft windows 98

microsoft windows 2000sp4

redhat linux ws 4

redhat linux ws 3

redhat linux es 4

redhat linux es 3

redhat linux as 4

redhat linux as 3

macromedia flash player <= 8.0.22.0

macromedia breeze meeting add-in <= 5.1

macromedia shockwave player <= 10.1.0.11

macromedia flash debug player <= 7.0.14.0

不受影响系统:

macromedia flash player 8.0.24.0

macromedia flash player 7.0.63.0

macromedia breeze meeting add-in 7.0.55.331 (win)

macromedia breeze meeting add-in 7.0.55.118 (mac)

macromedia shockwave player 10.1.1

描述:

macromedia flash player是一款非常流行的flash播放器,

flash player播放器swf文件存在远程代码执行漏洞其他漏洞

flash player在处理畸形恶意swf文件时存在漏洞,攻击者可能利用此漏洞在客户机器上执行任意指令。

如果攻击者诱骗用户使用flash player加载了恶意的swf文件的话,就会完全控制受影响的系统。

厂商补丁:

macromedia

目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载:

www.macromedia.com/devnet/security/security_zone/apsb06-03.html

篇6:java流实验内容及代码

一、实验目的1.熟悉流类库中各种常用流的使用方法。

2.能够使用流类实现基本的文件读写。

二、实验内容

1.编写程序,在控制台窗口提示输入两个整数,然后接收这两个整数,并输出它们的和。(要求:键盘输入通过流封装System.in获取,不要使用Scanner类)

import java.io.*;System.out.println(x);System.out.println(“y”);public class Num1 {n=in.readLine();public static void main(String []args)y=Integer.parseInt(n);{System.out.println(y);int x=0,y=0;}catch(IOException e)BufferedReader in=new BufferedReader({

newSystem.out.println(“error”);InputStreamReader(System.in));}

String n;int s=x+y;

try{System.out.println(s);System.out.println(“x”);}

n=in.readLine();}

x=Integer.parseInt(n);

2.设计学生类Student,属性:编号(整型);姓名(字符串),成绩(整型)。编写一个程序:要求:(1)输入3个学生的姓名和成绩,将其姓名和成绩保存到data.txt中;(2)然后从该文件中读取数据,求得这三个学生的平均成绩。

import java.io.*;DataOutputStream dout = newDataOutputStream(public class num2 {newpublic static void main(String[]args)FileOutputStream(“D:data.txt”));{String n;

BufferedReader in=new BufferedReader(for(int i=0;i<5;i++)new{

InputStreamReader(System.in));n=in.readLine();

int num=Integer.parseInt(n);try{String name=in.readLine();

n=in.readLine();int grade=Integer.parseInt(n);dout.writeBytes(num+“rn”);dout.writeBytes(name+“rn”);dout.writeBytes(grade+“rn”);}dout.close();}catch(IOException e1){int num=Integer.parseInt(n);

n=din.readLine();String name=n;n=din.readLine();int grade=Integer.parseInt(n);ave+=grade;}System.out.println(“平均成绩”+ave*1.0/5);System.out.println(“文件写入失败”);}try{DataInputStream din =new DataInputStream(new FileInputStream(“D:data.txt”));int ave=0;String n;for(int i=0;i<5;i++){n=din.readLine();

三、实验要求

完成程序设计并提交实验报告。

在“);失败”);} }

上一篇:更正商标申请/注册事项申请书格式下一篇:活龙小学支部先进典型材料