Avatar billede fralle.dk Nybegynder
31. august 2003 - 15:53 Der er 11 kommentarer og
1 løsning

Eksekvering af kode ved kompilering.

Hejsa,

Jeg har et stykke kode, der generer en privat nøgle til et certifikat. Jeg vil gerne have, at koden kun bliver udført ved kompileringen af .class filen, og herefter ikke eksekveres. På den måde vil nøglen altid have den samme værdi ved kørsel af .class filen, og for at lave en ny nøgle, skal programmet hermed blot re-kompileres.

Er der nogle der kan hjælpe?
Avatar billede arne_v Ekspert
31. august 2003 - 18:27 #1
Jeg mener ikke at der er nogen faciliteter i Jav asprohet du kan bruge.

Men du kan lave en utility som:
1) genererer
2) compiler
#2 kan opnåes enten ved at bruge Runtime.getRuntime().exec() eller
ved at kalde javac i lib/tools.jar !
Avatar billede pkrasmus Nybegynder
02. september 2003 - 23:31 #2
Eller brug ant build værktøjet på ant.apache.org
Avatar billede fralle.dk Nybegynder
03. september 2003 - 08:51 #3
pkrasmus: Du har vel ikke et sksempel på det?
Avatar billede fralle.dk Nybegynder
03. september 2003 - 09:12 #4
arne v: Du vil vælge at lave genereringen af nøgle i et seperat program eller?
Avatar billede arne_v Ekspert
03. september 2003 - 09:28 #5
Nej - jeg tænker i baner af et program som:
  - genererer en .java fil med nøgle i
  - compiler den til en .class fil
  - sletter .java filen
Avatar billede pkrasmus Nybegynder
03. september 2003 - 10:32 #6
Joh. Her er et jeg selv bruger i et lille hobbyprojekt:
(Det kræver jo selvfølgeligt at ant er installeret og opsat)

Det er specielt i init du skal kigge efter at få udført et program under compile processen.
Man kan lave stort set alt i disse omgivelser. Mangler man en task kan man selv udvikle den i java og bruge den i Ant, det er IMHO et meget stærkt udviklingsværktøj.



<project name="World" default="all" basedir=".">

<!-- set global properties for this build -->
<property name="src" value="src"/>
<property name="build" value="build"/>
<property name="dist"  value="dist"/>
<property name="lib"  value="lib"/>
<property name="doc"  value="doc"/>
<property name="ext"  value="ext"/>

<target name="init">
  <!-- Create the time stamp -->
  <tstamp/>
  <!-- Create the build directory structure used by compile -->
  <mkdir dir="${build}"/>
  <!-- Create the distribution directory used by dist -->
  <mkdir dir="${dist}"/>
  <!-- execute test.bat on windoze platform -->
  <exec dir="." executable="cmd" os="Windows NT">
    <arg line="/c test.bat"/>
  </exec>
</target>

<target name="compile" depends="init">
  <!-- Compile the java code from ${src} into ${build} with debug info -->
  <javac debug="on" srcdir="${src}" destdir="${build}"/>
</target>

<target name="compilehard" depends="init">
  <!-- Compile the java code from ${src} into ${build} minus debug -->
  <javac debug="off" srcdir="${src}" destdir="${build}"/>
</target>

<target name="servertest" depends="compile, data">
  <!-- Put everything in ${build} into the Server-${DSTAMP}.jar file -->
  <jar jarfile="${dist}/Server-${DSTAMP}.jar"
      manifest="lib/server_manifest.mf">
      <fileset dir="${build}"/>
  </jar>
</target>

<target name="serverdist" depends="compilehard, data">
  <jar jarfile="${dist}/Server-${DSTAMP}.jar"
      manifest="lib/server_manifest.mf">
      <fileset dir="${build}"/>
  </jar>
</target>
Avatar billede fralle.dk Nybegynder
03. september 2003 - 15:20 #7
arne v: I forbindelse med det program jeg er ved at lave, er der et krav til at nøglen ikke må ligge som en fil på harddisken. Her tænkte jeg på, om det ikke er muligt at "stoppe" .class-filen med den genererede nøgle i en .exe-fil sammen med selve programmet? ...selvom det ikke lige er "The Java way".
Avatar billede arne_v Ekspert
03. september 2003 - 15:27 #8
Der er visse muligheder.

Der er 3. parts værktøjer der kan konvertere java byte code til native kode.

Men umiddelbart tror jeg nok at det var nemmere hvis du lavede en lille
DLL med den key. Og så lod du din Java kode hente fra den via JNI.
Avatar billede fralle.dk Nybegynder
03. september 2003 - 17:19 #9
arne v: Lige kort til sidst, inden du får dine fortjente point - Hvad er fordelen ved at ligge nøgle i en DLL frem for at hardkode den i selve programmet? - Vil .DLL'en ikke ligge på disken eller?
Avatar billede arne_v Ekspert
03. september 2003 - 18:12 #10
De ligger begge på disk.

Det er betydeligt sværere at decompilere en EXE/DLL end java byte kode.

I.s.f. at lave en usupporteret konvertering af hele java byte koden
så synes jeg at det er bedr ebare at kalde et lille bitte stykke
native kode i en DLL via JNI.

Husk at "manuelt obfuscate" C/C++ koden lidt således at keyen ikke
ligger krypteret i DLL'en.
Avatar billede fralle.dk Nybegynder
03. september 2003 - 18:27 #11
arne v: Jeg takker mange gange for svaret, og håber du har fået dine point.
Avatar billede arne_v Ekspert
03. september 2003 - 19:04 #12
Det er helt OK.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester